【发布时间】:2021-12-07 13:12:54
【问题描述】:
我有一个问题,当从切片中对源进行测距时,我的通道中的数据在下游接收器中发生了更改,我不确定为什么会出现这种情况: https://play.golang.org/p/fPZJRj6XTRO
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
chanA := make(chan *string)
go func() {
data := []string{
"A",
"B",
"C",
}
for _, d := range data {
chanA <- &d
}
close(chanA)
}()
for res := range chanA {
fmt.Println(*res)
}
}
结果:
Hello, playground
B
B
C
预期:
Hello, playground
A
B
C
【问题讨论】:
-
除非有令人信服的理由,否则不要在频道上发送指针。通道写入将是 goroutine 安全的,但对该指针的并发写入则不会。
-
@colm.anseo 谢谢,我知道:D