Go 给人的印象是容易入门,因为语法简单。不过新手还是比较容易犯一些错误的。

 

本文总结了 5 个常见的错误,你检验下自己犯过没有?!这些是我写 Go 时所犯的错误,希望对你有帮助!

 

1、循环内部

在循环中,有几种情况可能会导致混乱,你需要弄清楚。

 

1.1、循环迭代器变量中使用引用

出于效率考虑,经常使用单个变量来循环迭代器。由于在每次循环迭代中会有不同的值,有些时候这会导致未知的行为。例如:

 

in := []int{1, 2, 3} 

 

var out []*int 

for  _, v := range in { 

 out = append(out, &v) 

 

fmt.Println("Values:", *out[0], *out[1], *out[2]) 

fmt.Println("Addresses:", out[0], out[1], out[2]) 

输出结果:

 

Values: 3 3 3 

Addresses: 0xc000014188 0xc000014188 0xc000014188 

是不是很惊讶?在 out 这个 slice 中的元素都是 3。实际上很容易解释为什么会这样:在每次迭代中,我们都将 v append 到 out 切片中。因为 v 是单个变量(内存地址不变),每次迭代都采用新值。在输出的第二行证明了地址是相同的,并且它们都指向相同的值。

 

简单的解决方法是将循环迭代器变量复制到新变量中:

dawei

【声明】:邵阳站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。