示例代码
package main
import (
"fmt"
"time"
)
type newField string
func (f newField) print() {
fmt.Println(f)
}
func main() {
data := []newField{"one", "two", "thred"}
for _, v := range data {
go v.print() //print one two three
go func(){fmt.Println(v)}() // print three three three
}
time.Sleep(3 * time.Second)
}
疑问
range过程中,两种打印方式,为什么打印的结果不同呢?
闭包的问题,
v.print()
是依次调用的是"one","two","three"的print
方法。第二个goroutine引用了循环变量v
,goroutine未启动时,v
就改变了,所以不一致,但是不一定是three,three,three,与运行时的调度有关