加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Golang 中不要犯这 5 个错误啦

发布时间:2021-11-02 11:01:02 所属栏目:语言 来源:互联网
导读: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 是单个变量(内存地址不变),每次迭代都采用新值。在输出的第二行证明了地址是相同的,并且它们都指向相同的值。   简单的解决方法是将循环迭代器变量复制到新变量中:

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!