代码如下:
package main
import (
"fmt"
"time"
)
type field struct {
name string
}
func (p *field) print() {
fmt.Println(p.name)
}
func main() {
data := []field{{"one"},{"two"},{"three"}}
for _,v := range data {
go v.print()
}
time.Sleep(3 * time.Second)
}
我知道代码是错误的,因为在 for-range 循环中重用了 for 循环变量。
当 goroutine 有机会启动时,vmight的值已被修改。所以打印结果将是"three,three,three".
但是当我们将数据变量修改为另一个声明时:
data := []*field{{"one"},{"two"},{"three"}}
打印结果将为"one ,two,three".
我不明白为什么。指针有什么不同或有什么不同的机制吗?
我从这篇文章中读到了这个。但海报没有说明原因。或者这只是一个事件,输出是正确的。
慕丝7291255
相关分类