
Go 语言不懂就问系列
文章平均质量分 82
每一个“为什么”都值得被认真对待,每一个“不懂”都是成长的契机!
所幸你是例外
昨天是段历史,明天是个谜团,而今天是天赐的礼物。
展开
-
Go语言结构体中的填充字段:揭秘内存对齐的奥秘
一、内存对齐与填充字段详解在 Go 语言中,结构体(struct)是一种用户自定义的数据类型,它允许我们把多个不同类型的数据组合在一起,组成一个单一的复合结构。无论是构建复杂的数据结构,还是实现面向对象编程中的概念,结构体在 Go 语言中都扮演着非常重要的角色!这段代码是我在 Github 上阅读到的,当时我对这个结构体类型的设计感到好奇,不禁思考这样设计的原因是什么?它有哪些优势?在搜索引擎的帮助下,我最终了解到这些字段被称为填充字段(Padding Fields)。原创 2024-12-22 23:30:40 · 1238 阅读 · 0 评论 -
探秘 Go 语言赋值表达式的奇妙之旅
并将结果保存在一个新的临时变量中(注意这里不是用上一步的结果,而是重新计算);并没有使用到第一个表达式中计算得出的结果。这也就意味着,在计算表达式。注意,由于计算顺序是从左到右依次进行的,因此第二个表达式。的结果保存在临时变量中,最后一次性将它们赋值给。,但是其计算顺序是从左到右依次进行的。最后一次性将这三个临时变量的值分别赋值给。进行复用,而是按照先后顺序依次计算赋值。,并将结果保存在另一个临时变量中;,并将结果保存在一个临时变量中;在 Go 语言中,赋值表达式。的值,并依次将它们赋值给。原创 2024-12-22 22:56:19 · 385 阅读 · 0 评论 -
简单了解一下 Go 语言的构建约束?
构建约束是一种在 Go 语言中控制源文件编译条件的方法,它可以让您指定某些文件只在特定的操作系统、架构、编译器或 Go 版本下编译,而在其他环境中自动忽略。通过灵活运用构建约束,开发者可以有效地为不同环境编写适合的代码,大大提升了 Go 语言的跨平台开发能力。:该文件只在 darwin 系统并且没有启用 cgo 的情况下编译,其他环境忽略。: 该文件只在 linux 系统和 386 架构下编译,其他环境忽略。:该文件只在 linux 系统和 arm 架构下编译,其他环境忽略。原创 2024-12-13 18:45:42 · 580 阅读 · 0 评论 -
十分钟掌握Go语言==运算符与reflect.DeepEqual函数处理interface{}值的比较规则
当使用 == 符号比较两个 interface{} 类型的值时,Go 语言底层会先比较它们的动态类型,也就是比较它们的第一个字,看是否指向相同的类型信息。对于 reflect.DeepEqual 而言,它通过牺牲程序的性能弥补了 == 运算符无法处理切片、映射、函数的短板,对于这些不支持 == 操作的类型,reflect.DeepEqual 函数会有一套自己的比较规则,它就是是 == 运算符的 Plus 版本。如果动态值的大小超过了一个字,那么这个字就存储了动态值的指针,指向实际的动态值。原创 2024-02-05 14:20:29 · 1029 阅读 · 0 评论