参考资料 - Go 原理 · 接口转换的原理
通过前面提到的 iface 的源码可以看到,实际上它包含接口的类型 interfacetype 和 实体类型的类型 type,这两者都是 iface 的字段 itab 的成员。也就是说生成一个 itab 同时需要接口的类型和实体的类型。
1198 字
|
6 分钟
Cover Image of the Post
类型转换 - Golang
我们知道,Go 语言中不允许隐式类型转换,也就是说 = 两边,不允许出现类型不相同的变量。
1139 字
|
6 分钟
Cover Image of the Post
编译器自动检测类型是否实现接口 - Golang
经常看到一些开源库里会有一些类似下面这种奇怪的用法:
216 字
|
1 分钟
Cover Image of the Post
float 类型可以作为 map 的 key 吗
从语法上看,是可以的。Go 语言中只要是可比较的类型都可以作为 key。除开 slice,map,functions 这几种类型,其他类型都是 OK 的。具体包括:布尔值、数字、字符串、指针、通道、接口类型、结构体、只包含上述类型的数组。这些类型的共同特征是支持 == 和 != 操作符,k1 ==
694 字
|
3 分钟
map 中的 key 为什么是无序的
map 在扩容后,会发生 key 的搬迁,原来落在同一个 bucket 中的 key,搬迁后,有些 key 就要远走高飞了(bucket 序号加上了 2^B)。而遍历的过程,就是按顺序遍历 bucket,同时按顺序遍历 bucket 中的 key。搬迁后,key 的位置发生了重大的变化,有些 key
358 字
|
2 分钟
map 是线程安全的吗
在查找、赋值、遍历、删除的过程中都会检测写标志,一旦发现写标志置位(等于1),则直接 panic。赋值和删除函数在检测完写标志是复位之后,先将写标志位置位,才会进行之后的操作。
90 字
|
1 分钟
map 的删除过程是怎样的
写操作底层的执行函数是 mapdelete:
240 字
|
1 分钟
什么是 map - Go 原理
维基百科里这样定义 map:
2885 字
|
14 分钟