Golang基础--常见坑

这里列举的Go语言常见坑都是符合Golang语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。

可变参数是空接口类型

当参数的可变参数是空接口类型时,传人空接口的切片时需要注意参数展开的问题。

func main() {
    var a = []interface{}{1, 2, 3}
    fmt.Println(a)
    fmt.Println(a...)
}
// 不管是否展开,编译器都无法发现错误,但是输出是不同的:
// [1 2 3]
// 1 2 3

数组是值传递

在函数调用参数中,数组是值传递,无法通过修改数组类型的参数返回结果,必要时需要使用切片。

func main() {
   x := [3]int{1, 2, 3}
   func(arr [3]int) {
      arr[0] = 7
      fmt.Println(arr)
   }(x)
   fmt.Println(x)
}
// [7 2 3]
// [1 2 3]

map遍历顺序是不固定的

map是一种hash表实现,每次遍历的顺序都可能不一样。Golang会提前取一个随机数,把桶的遍历顺序随机化。

func main() {
   m := map[string]string{
      "1": "1",
      "2": "2",
      "3"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值