站长网 语言 Golang 中不要犯这 5 个错误啦

Golang 中不要犯这 5 个错误啦

Go 给人的印象是容易入门,因为语法简单。不过新手还是比较容易犯一些错误的。本文总结了 5 个常见的错误,你检验下自己犯过没有?!这些是我写 Go 时所犯的错误,希望对你有帮助!1、循环内部在循环中,有几种情况可能会导致混乱,你需要弄清楚。1.1、循环迭

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 是单个变量(内存地址不变),每次迭代都采用新值。在输出的第二行证明了地址是相同的,并且它们都指向相同的值。

 

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

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/1102/18050.html

作者: dawei

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

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部