for range
*intch
package main
import (
"fmt"
)
func main() {
ch := make(chan *int, 5)
//sender
input := []int{1,2,3,4,5}
go func(){
for _, v := range input {
ch <- &v
}
close(ch)
}()
//receiver
for v := range ch {
fmt.Println(*v)
}
}
inputchch
1
2
3
4
5
现在运行一下程序,得到的输出如下:
5
5
5
5
5
很明显,程序并没有达到预期的结果,那么问题出在哪里呢?我们将代码稍作修改:
//receiver
for v := range ch {
fmt.Println(v)
}
得到如下输出:
0x416020
0x416020
0x416020
0x416020
0x416020
v*int
for _, v := range input {
ch <- &v
}
for rangevinputvinputvvvch
tempch
for _, v := range input {
temp := v
ch <- &temp
}
抑或直接引用数据的内存(推荐,无需开辟新的内存空间):
for k, _ := range input {
c <- &input[k]
}
range