https://golang.org/ref/spec#For_range
对于带有范围子句的语句
对于数组,指向数组的指针或切片值a,索引迭代值按递增顺序生成,从元素索引0开始.如果存在最多一个迭代变量,则范围循环生成从0到len的迭代值( a)-1并且不索引到数组或切片本身.对于nil切片,迭代次数为0.
根据规范,在Go中迭代线性数据结构(数组或切片或字符串)将使索引中的每个元素始终按索引增加的顺序排列.
for i, v := range []int{11, 22, 33, 44} {
fmt.Println(i, v)
}
Run Code Online (Sandbox Code Playgroud)
但问题是我无法在规范中找到保证,
这个具有隐式索引迭代值的range-iterate-over子句也将始终保持相同的顺序:
for _, v := range []int{11, 22, 33, 44} {
fmt.Println(v)
}
Run Code Online (Sandbox Code Playgroud)
我上面提到的那两个例子总是以相同的顺序执行吗?
我认为他们这样做但我还没有听到这个承诺.
for ... range当索引迭代值由空白标识符(下划线_)表示时,如何工作?