考虑以下 Go 代码(也在Go Playground 上):package mainimport "fmt"import "time"func main() { for _, s := range []string{"foo", "bar"} { x := s func() { fmt.Printf("s: %s\n", s) fmt.Printf("x: %s\n", x) }() } fmt.Println() for _, s := range []string{"foo", "bar"} { x := s go func() { fmt.Printf("s: %s\n", s) fmt.Printf("x: %s\n", x) }() } time.Sleep(time.Second)}此代码产生以下输出:s: foox: foos: barx: bars: barx: foos: barx: bar假设这不是一些奇怪的编译器错误,我很好奇为什么 a) s 的值在 goroutine 版本和常规 func 调用中的解释不同,以及 b) 为什么将它分配给循环内的局部变量有效两种情况。
2 回答
- 2 回答
- 0 关注
- 168 浏览
添加回答
举报
0/150
提交
取消