• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于golang中平行赋值浅析

    对于golang, 交换两个数很简单,如下这么写就可以了:

    i, j = j, i

    等号左边和右边含有多个表达式,这就是平行赋值。 赋值分为两个步骤:

    我们来看下面一段代码会输出什么?

    func main() {
     i := 1
     s := []string{"A", "B", "C"}
     i, s[i-1] = 2, "Z"
     fmt.Printf("s: %v \n", s)
    }

    这里输出的 s: [Z,B,C] 而不是s: [A,Z,C]。 这是因为等号左边的切片的索引表达式i-1会被先计算,最后才是赋值。 计算和赋值的顺序,都是从左往右。 我们再来看下面的代码会输出什么?

    func main() {
     a := []int{1, 2, 3, 4}
     defer func(a []int) {
      fmt.Printf("a: %v\n", a)
     }(a)
     a[0], a[4] = a[1], a[2]
    }

    输出的是:

    a: [2 2 3 4]
    panic: runtime error: index out of range
    
    goroutine 1 [running]:

    在赋值的过程中,即使后面的引发了panic,前面的也会被赋值成功。 再看这个会输出什么?

    func main() {
     a := []int{1, 2, 3, 4}
     defer func(a []int) {
      fmt.Printf("a: %v\n", a)
     }(a)
     a[0], a[1] = a[2], a[4]
    }

    输出的是:

    a: [1 2 3 4]
    panic: runtime error: index out of range
    
    goroutine 1 [running]:
    main.main()

    再次理解一下,赋值的第一步,计算等号左边的索引表达式,取址表达式 和 计算等号右边的表达式。

    理解参照了《Go并发编程一书》

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Go语言中的变量声明和赋值
    • Go语言实现字符串切片赋值的方法小结
    • go和python变量赋值遇到的一个问题
    上一篇:golang搭建静态web服务器的实现方法
    下一篇:详解Golang实现http重定向https的方式
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    关于golang中平行赋值浅析 关于,golang,中,平行,赋值,