Golang在变量声明、初始化以及赋值语句上照比C语言有了许多改进:a) 支持在同一行声明多个变量var a, b, c intb) 支持在同一行初始化多个变量(不同类型也可以)var a, b, c = 5, "hello", 3.45a, b, c := 5, "hello", 3.45 (short variable declaration)c) 支持在同一行对多个变量进行赋值(在声明后且不同类型也可以)a, b, c = 5, "hello", 3.45这种语法糖我们是笑纳的,毕竟人生苦短,少写一行是一行啊^_^。但这种语法糖却给我们带来了一些令人困惑的问题!比如下面这个就是Rob Pike在一个talk中slide(Go Course Day2)中的一个问题:n0, n1 = n0 + n1, n0or:n0, n1 = op(n0,n1), n0n0, n1的值在上述语句执行完毕后到底为多少呢?显然这个问题涉及到Go语言的语句求值顺序(evaluation order)。求值序在任何一门编程语言中都是比较难缠的,很多情形下,语言规范给出的答案都是“undefined(未定义)” or "not specified" or “依赖实现”,尤其是对
...
继续阅读
(103)