一只斗牛犬
for _,item := range result.Items { //fmt.Println("got item: ",item)//把这个放 go func()里面 go func() { fmt.Println("got item: ",item) c.ItemChan <- item }() }这样你打印的就和接收到的数据是一样的了。因为go func 并不能保证立即执行,在它还没有执行的时候,item值已经被for循环改变了我有个疑问,你在写入的地方起goroutine是为了for循环不被写入阻塞吗?如果不想因为写入被阻塞,可以给channel定义一个缓冲。按照例子的,缓冲数定义为items的数量即可