新生困惑,slices和chan

zxmin · · 1345 次点击
polaris
社区,需要你我一同完善!
两个完全不一样的东西,有一个表现类似,你不能就说它们是一样的。 就简单一个问题:chan 取走值后,可以继续往里面写,slice 可以吗?slice 是取走吗?
#1
更多评论
首先第一点你要先明白,slice和chan并不是同样的东西。 slice是一个可变长度的数组,数组是一个容器,是用来存储数据用的。 chan是管道,管道并不是存储数据用的,管道是为了grounite之间通信用的。 chan分为缓存chan,和非缓存chan,你上面定义的是缓存chan所以表面上看起来你可以往里存数据而不会造成阻塞, 你如果定义一个非缓存chan你就会明白,如果往非缓存chan存数据而不立马取出就会立马阻塞。
#2
你好,指的是这样吗 ? func main() { c := make(chan int) go func() { for i := 0; i < 3; i++ { c <- i } }() fmt.Println(<-c) go func() { for i := 0; i < 3; i++ { c <- i } }() } 算不算没有立马取出 ? 没有阻塞呀
#3