我最近浏览了 Go 的“语言规范” https://golang.org/ref/spec#Order_of_evaluation,但发现评估的顺序与本文档中解释的不同。
例如,它说:
a := 1
f := func() int { a++; return a }
x := []int{a, f()} // x may be [1, 2] or [2, 2]: evaluation order between a and f() is not specified
然后我尝试使用此代码:
package main
import "fmt"
func main() {
for {
result := evaluate()
if result == 1 {
break
}
}
}
func evaluate() int {
a := 1
f := func() int { a++; return a }
x := []int{a, f()}
fmt.Println(x)
return x[0]
}
我发现切片 x 的值总是 [2,2]。我有什么误解吗?
慕容森
相关分类