平台网站做数据维护需要多久,微信网站技术方案,网站开发 手机 电脑,大庆网站制作公司地址1、定义
管道是golang语言提供的goroutine间的通讯方式#xff0c;channel可以让一个goroutine发送特定的值给另一个goroutine的通讯机制。
管道是引用类型。
golang语言中channel是一种特殊的类型。像一个队列一样#xff0c;先进先出。 var 变量 chan 元素类型 var ch1 …1、定义
管道是golang语言提供的goroutine间的通讯方式channel可以让一个goroutine发送特定的值给另一个goroutine的通讯机制。
管道是引用类型。
golang语言中channel是一种特殊的类型。像一个队列一样先进先出。 var 变量 chan 元素类型 var ch1 chan int //声明一个传递整型的管道 var ch2 chan []int 2、创建管道 ch : make(chan 类型 容量) //给管道里面存储数据 ch - 10 // 获取管道里面的内容 a:-ch -ch //从管道取值不赋给变量 3、管道阻塞
1、管道存储的数据超过容量。
2、在没有使用协程的情况下如果管道的数据全部取出再取就会报deadlock
4、循环遍历管道数据
使用for range遍历管道需要关闭管道 close(ch1)
for 循环 可以不用关闭 package mainimport fmtfunc main() {var ch1 make(chan int, 10)for i : 0; i 10; i {ch1 - i}close(ch1) //关闭管道for value : range ch1 { //管道没有keyfmt.Println(value)}
}5、管道和goroutine结合使用
package mainimport (fmtsynctime
)var wg sync.WaitGroupfunc writeData(ch chan int) {for i : 0; i 10; i {ch - ifmt.Printf(写入数据%v成功\n, i)time.Sleep(time.Millisecond * 50)}close(ch)wg.Done()
}func readData(ch chan int) {for v : range ch {fmt.Printf(读取数据%v成功\n, v)time.Sleep(time.Millisecond * 50)}wg.Done()
}func main() {var ch1 make(chan int, 10)wg.Add(1)go writeData(ch1)wg.Add(1)go readData(ch1)wg.Wait()
}6、单向管道 //管道声明为只写 ch2 : make(chan- int,2) //管道声明为只读 ch3 :make(-chan int,2) 7、多路复用 select
select 的使用类似于 switch 语句它有一系列 case 分支和一个默认的分支。每个 case 会对 应一个管道的通信接收或发送过程。select 会一直等待直到某个 case 的通信操作完成 时就会执行 case 分支对应的语句。
使用select来获取channel里面的数据不需要关闭channel select{ case -ch1: ... case data : -ch2: ... case ch3-data: ... default: 默认操作 }