channels 是 goroutines之间通信的工具, 可以理解为管道, 虽然go也提供共享变量的方式, 但是更加推荐使用channel
func TestChan(t *testing.T) {
c := make(chan int)
go func() {
c <- 48
}()
fmt.Println(<- c)
// 保持持续运行
holdRun()
}
func holdRun() {
time.Sleep(1 * time.Hour)
}
c := make(chan int) 声明一个 传输整形 的unbuffer chan,(接收消息和发送消息者将会阻塞,直到channel ”可用“)
<- 操作符用来接受和发送消息 chan <- 48 发送“48“ 进入管道, <-chan 接收消息
如果: c: = make(chan int, 10) 声明一个 传输整形 的buffer chan, 容量为10, 接收消息将可以立即返回除非channel里面没有消息, 发送者返回除非容量满
func TestDeadLock(t *testing.T) {
c := make(chan int)
c <- 42
val := <-c
fmt.Println(val)
}
func TestDeadLock1(t *testing.T) {
c := make(chan int)
//c := make(chan int, 0)
go func() {
c <- 48
}()
val := <-