271_尚硅谷_管道快速入门案例
1.channel管道快速入门案例
2.演示管道的使用_代码
package main
import (
"fmt"
)
// todo 演示管道的使用
func main() {
// 1. 创建一个可以存放3个int类型的管道
var intChan chan int
intChan = make(chan int, 3)
// 2. 看看intChan是什么
fmt.Printf("intChan 的值= %v intChan 本身的地址= %p\n", intChan, &intChan)
// 3. 向管道写入数据
intChan <- 10
intChan <- 20
intChan <- 30
// ! 注意点:当我们向管道写入数据时(案例是3个int),不能超过其容量, 但是可以边写入边读取
// intChan <- 40
// 4. 看看管道的长度和容量(cap)
fmt.Println("=============== 4.看看管道的长度和容量(cap) ================")
fmt.Printf("len(intChan)= %v cap(intChan)= %v\n", len(intChan), cap(intChan))
// 5. 从管道读取数据
var num2 int
num2 = <-intChan // ! 注意点:当我们从管道读取数据时,如果管道中没有数据,就会阻塞等待
fmt.Println("=============== 5. 读取管道数据 ================")
fmt.Println("num2=", num2)
// 6. 取完数据后, 再看管道的长度和容量(cap)
fmt.Println("=============== 6. 取完数据后, 再看管道的长度和容量(cap) ================")
fmt.Printf("len(intChan)= %v cap(intChan)= %v\n", len(intChan), cap(intChan))
// 7. 在没有使用协程的情况下,如果管道数据全部取出,再取就会报错 deadlock
fmt.Println("=============== 7. 在没有使用协程的情况下,如果管道数据全部取出,再取就会报错 deadlock ================")
num3 := <-intChan
num4 := <-intChan
num5 := <-intChan
fmt.Println("num3=", num3, "num4=", num4, "num5=", num5)
}
3.演示管道的使用_运行结果
浙公网安备 33010602011771号