我不大明白下面两种写法在go里面有什么不同
func MySelect() {
ch := make(chan int, 10)
a := <-ch
fmt.Println(a)
}
func MySelect() {
ch := make(chan int, 10)
select {
case a := <-ch:
fmt.Println(a)
}
}
第二种使用了select使用有什么好处呢?
我不大明白下面两种写法在go里面有什么不同
func MySelect() {
ch := make(chan int, 10)
a := <-ch
fmt.Println(a)
}
func MySelect() {
ch := make(chan int, 10)
select {
case a := <-ch:
fmt.Println(a)
}
}
第二种使用了select使用有什么好处呢?
7 回答5.4k 阅读
6 回答7k 阅读✓ 已解决
4 回答2.4k 阅读
1 回答3.4k 阅读
2 回答942 阅读✓ 已解决
2 回答2.3k 阅读
1 回答2.2k 阅读
就你写的这两个示例,运行上没有区别
考虑下面的情况:
1、如果 ch 持续不断有数据写入,要如何读取?(很明显需要使用 for 循环)如下:
2、如果 MySelect() 要多读取并处理另一个持续不断写入数据的 channel 呢?下面的代码是否可以实现?
很明显不行,因为
a := <-ch
可能会阻塞后面的代码执行。这时候就要用到select
了,如下:ch
和ch2
无论哪个先有数据被读取到都不会产生阻塞大概就是这个意思