猿问

如果我修改我正在浏览的切片会发生什么?

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


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循环第一次开始时所看到的那样,或其他东西?


GCT1015
浏览 199回答 2
2回答

梵蒂冈之花

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

一只萌萌小番薯

刚刚在语言规范中找到了答案。范围表达式在开始循环之前计算一次[...]`所以它在副本上运行。太棒了!
随时随地看视频慕课网APP

相关分类

Go
我要回答