真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Golang單方向的channel

默認(rèn)情況下,通道是雙向的,也就是,既可以往里面發(fā)送數(shù)據(jù)也可以同里面接收數(shù)據(jù)。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、平城ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的平城網(wǎng)站制作公司

 

但是,我們經(jīng)常見一個通道作為參數(shù)進(jìn)行傳遞而值希望對方是單向使用的,要么只讓它發(fā)送數(shù)據(jù),要么只讓它接收數(shù)據(jù),這時候我們可以指定通道的方向。

 

單向channel變量的聲明非常簡單,如下:

var ch2 chan int       // ch2是一個正常的channel,不是單向的

var ch3 chan<- float64 // ch3是單向channel,只用于寫float64數(shù)據(jù)

var ch4 <-chan int     // ch4是單向channel,只用于讀取int數(shù)據(jù)

 

l chan<- 表示數(shù)據(jù)進(jìn)入管道,要把數(shù)據(jù)寫進(jìn)管道,對于調(diào)用者就是輸出。

l <-chan 表示數(shù)據(jù)從管道出來,對于調(diào)用者就是得到管道的數(shù)據(jù),當(dāng)然就是輸入。

 

可以將 channel 隱式轉(zhuǎn)換為單向隊列,只收或只發(fā),不能將單向 channel 轉(zhuǎn)換為普通channel:

    c := make(chan int, 3)

    var send chan<- int = c // send-only

    var recv <-chan int = c // receive-only

    send <- 1

    //<-send //invalid operation: <-send (receive from send-only type chan<- int)

    <-recv

    //recv <- 2 //invalid operation: recv <- 2 (send to receive-only type <-chan int)

 

    //不能將單向 channel 轉(zhuǎn)換為普通channel

    d1 := (chan int)(send) //cannot convert send (type chan<- int) to type chan int

    d2 := (chan int)(recv) //cannot convert recv (type <-chan int) to type chan int

 

示例代碼:

//   chan<- //只寫

func counter(out chan<- int) {

    defer close(out)

    for i := 0; i < 5; i++ {

        out <- i //如果對方不讀 會阻塞

    }

}

 

//   <-chan //只讀

func printer(in <-chan int) {

    for num := range in {

        fmt.Println(num)

    }

}

 

func main() {

    c := make(chan int) //   chan   //讀寫

 

    go counter(c) //生產(chǎn)者

    printer(c)    //消費者

 

    fmt.Println("done")

}

 


文章名稱:Golang單方向的channel
URL網(wǎng)址:http://weahome.cn/article/jsghgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部