请查看以下代码片段:
链接在这里:https://play.golang.org/p/cdryPmyWt5 上面的代码将检查指针和值在for循环中的差异,同时还使用了go语句。对于代码:
似乎输出了一 二 三,为什么?
谢谢。
package main
import (
"fmt"
"time"
)
type field struct {
name string
}
func (p *field) print() {
fmt.Println(p.name)
}
func main() {
fmt.Println("use values:")
// use values in range loop and go rountines
values := []field{{"one"},{"two"},{"three"}}
for _, v := range values {
go v.print()
}
time.Sleep(time.Second)
fmt.Println()
fmt.Println("use pointers:")
// use pointers in range loop and go rountines
poniters := []*field{{"one"},{"two"},{"three"}}
for _, v := range poniters {
go v.print()
}
time.Sleep(time.Second)
}
链接在这里:https://play.golang.org/p/cdryPmyWt5 上面的代码将检查指针和值在for循环中的差异,同时还使用了go语句。对于代码:
values := []field{{"one"},{"two"},{"three"}}
for _, v := range values {
go v.print()
}
我们知道控制台会打印三三三作为结果,因为for循环在goroutine开始执行之前已经运行到了结尾,将v写入切片的最后一个元素。但是指针呢?
poniters := []*field{{"one"},{"two"},{"three"}}
for _, v := range poniters {
go v.print()
}
似乎输出了一 二 三,为什么?
谢谢。