如果我这样做:
func main() { foo := 1 go func() { fmt.Println(foo) }() }
在那个func里面引用foo是错误的吗?
很好,只有在上下文变化时才需要注意(在局部指针变量的情况下):
package main import ( "errors" "fmt" ) func test() { defer func() { fmt.Println(1) }() defer func() { fmt.Println(2) }() defer func() { fmt.Println(3) }() } func main() { test() err := errors.New("error 1") defer func() { fmt.Println(err) }() err = errors.New("error 2") }
还请参见:https : //www.goinggo.net/2014/06/pitfalls-with-closures-in- go.html