Learn Go Error Prone Details
目录
Go语言中的一些易错细节, 参考资料1
对象创建
- struct:
new(T)
===&T{}
- slice, map:
make(map[string]int)
===map[string]int{}
interface判等
interface{}类型的相等需要判断其Type与Value两个属性, 只有当两个值都没有设置时才等于nil.
for循环
1 for循环中变量(slice)是副本
|
|
关于上面for循环有几个点:
- 实际遍历的aContainer是原始值的一个副本
- element是遍历到的元素的原始值的一个副本
- key和element整个循环都是同一个变量,而不是每次迭代都生成新变量
2 for循环中变量(map)不是副本
|
|
3 for循环中变量(map)非定序打印
|
|
三个数字可以以任意顺序出现, 123, 132, 213, 231, 312, 321.
map的值不可取址
这些类型都不能取址:
- map元素
- string的字节元素
- 常量(有名常量和字面量都不可以)
- 中间结果值(函数调用、显式值转换、各种操作)
|
|
一般来说,一个不可寻址的值的直接部分是不可修改的。但是map的元素是个例外。 map的元素虽然不可寻址,但是每个映射元素可以被整个修改(但不可以被部分修改):
|
|