美文网首页
Go channel-2

Go channel-2

作者: 来到了没有知识的荒原 | 来源:发表于2020-07-18 20:37 被阅读0次

缓冲通道

  • 非缓冲通道: make(chan T)
    一次发送,一次接受,都是阻塞式的
  • 缓冲通道:make(chan T, capacity)
    发送:缓冲区满了,才会阻塞
    接收:缓冲区空了,才会阻塞

创建容量为5的通道

package main

import "fmt"

func main() {
    ch := make(chan int, 5)
    fmt.Println(len(ch), cap(ch))

    ch <- 100
    ch <- 200
    fmt.Println(len(ch), cap(ch))

    data := <-ch
    fmt.Println("读出data:",data)
    fmt.Println(len(ch), cap(ch))
}

单向通道

双向通道:可读可写
单向通道:只读或只写

ch1:=make(chan int)   //双向
ch2:=make(chan <- int)  // 单向,只写
ch3:=make(<- chan int)  // 单向,只读

一般单项通道都是作为函数形参的类型,起到安全和保护的作用,规定某个函数对channel只读或只写。
创建的时候一般都是双向通道,创建单项通道没什么用

package main

import "fmt"

func main() {
    ch1:=make(chan int)   //双向
    //ch2:=make(chan <- int)  // 单向,只写
    //ch3:=make(<- chan int)  // 单向,只读

    go sendData(ch1)

    data:=<-ch1
    fmt.Println("data:",data)
}

func sendData(ch chan <-int){
    ch<-100
}

相关文章

网友评论

      本文标题:Go channel-2

      本文链接:https://www.haomeiwen.com/subject/mcefkktx.html