一 channel 可以声明为只读,或者只写性质
1 代码
package main
import (
"fmt"
)
func main() {
// 管道可以声明为只读或者只写
// 1 在默认情况下,管道是双向
// var chan1 chan int // 可读可写
// 2 声明为只写
var chan2 chan<- int
chan2 = make(chan int, 3)
chan2 <- 20
// num := <-chan2 // 读发生错误
fmt.Println("chan2=", chan2)
// 3 声明为只读
var chan3 <-chan int
num2 := <-chan3
// chan3<- 30 // 写发生错误
fmt.Println("num2", num2)
}
2 测试
chan2= 0xc042078080
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive (nil chan)]:
main.main()
E:/gocode/src/chapter16/channeldetails/demo01/main.go:19 +0x106
二 channel 只读或只写的最佳实践
1 代码
package main
import "fmt"
func main() {
var ch chan int
ch = make(chan int, 10)
exitChan := make(chan struct