定向通道是只能发送or只能接收数据的通道。
双向通道是这样的:
package main
import "fmt"
func main() {
ch1 := make(chan string)
//建立一个chanel 通知一下 在子协程没结束之前 主协程不要结束
done := make(chan bool)
go sendData(ch1, done)
data := <-ch1
fmt.Println("子协程中传来的数据: ", data)
ch1 <- "that is rain"
<-done
fmt.Println("main finished")
}
func sendData(ch1 chan string, done chan bool) {
ch1 <- "this is bill"
data := <-ch1
fmt.Println("主协程传来的数据", data)
//这个表示在子的协程结束的时候 再传递一个 bool 告诉 主协程 子协程已经执行完毕,否则主协程先不要结束
done <- true
}
运行结果是这样的:
子协程中传来的数据: this is bill
主协程传来的数据 that is rain
main finished
以上就是双向通道的写法,下面介绍一下单向通道:
package main
import "fmt"
func main() {
//双向chanel
ch1 := make(chan int)
//单向:只能写
//ch2 := make(chan<- int)
////单向:只能读
//ch3 := make(<-chan int)
go writes(ch1)
//go writes(ch2)
data := <-ch1
fmt.Println("the data from writes is : ", data)
}
func writes(ch chan<- int) {
ch <- 100
fmt.Println("writing completed")
}
对于所谓的单向chanel,在创建之初,通常还是会创建一个双向的通道,只不过在函数(比如这里的writes中设为只能写)。
参考:bilibili
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。