如果我修改切片,我会发生什么?

时间:2014-10-25 21:28:31

标签: go

我最近注意到我这样做了:

for t, ts := range timespans {
    // remove current item
    if t+1 < len(timespans) {
        timespans = append(timespans[:t], timespans[t+1:]...)
    } else {
        timespans = timespans[:t]
    }

其中

var timespans []TimeSpan

type TimeSpan [2]time.Time

range内部如何运作?

它是否像for i:=0; i<42; i++循环(和跳过项目)一样工作,或者它是否在timespans的副本范围内,因为它在循环首次启动时显示,或其他什么?

2 个答案:

答案 0 :(得分:2)

它适用于切片的副本,您可以修改切片的数据,但它会忽略追加等。

答案 1 :(得分:1)

刚刚在语言规范中找到答案。

  

在开始循环[...]`

之前,范围表达式被计算一次

所以它在副本上运行。真棒!