我最近注意到我这样做了:
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
的副本范围内,因为它在循环首次启动时显示,或其他什么?
答案 0 :(得分:2)
它适用于切片的副本,您可以修改切片的数据,但它会忽略追加等。
答案 1 :(得分:1)
刚刚在语言规范中找到答案。
在开始循环[...]`
之前,范围表达式被计算一次
所以它在副本上运行。真棒!