Golang 菜鳥教程

Golang 控制語句

Golang 函數(shù) & 方法

Golang 結(jié)構(gòu)體

Golang 切片 & 數(shù)組

Golang 字符串(String)

Golang 指針

Golang 接口

Golang 并發(fā)

Golang 異常(Error)

Golang 其他雜項(xiàng)

Go 語言單向通道

眾所周知,通道是并發(fā)運(yùn)行的goroutine之間的通信媒介,因此它們可以相互發(fā)送和接收數(shù)據(jù)。默認(rèn)情況下,通道是雙向的,但是您也可以創(chuàng)建單向通道。只能接收數(shù)據(jù)的通道或只能發(fā)送數(shù)據(jù)的通道,就是單向通道。單向通道也可以通過make()函數(shù)創(chuàng)建,如下所示:

//僅接收數(shù)據(jù)
c1:= make(<- chan bool)

//僅用于發(fā)送數(shù)據(jù)
c2:= make(chan<-bool)

單向通道使用示例1:

package main 
  
import "fmt"
  
func main() { 
  
    //僅用于接收數(shù)據(jù)
    mychanl1 := make(<-chan string) 
  
    //僅用于發(fā)送數(shù)據(jù)
    mychanl2 := make(chan<- string) 
  
    //顯示通道的類型 
    fmt.Printf("%T", mychanl1) 
    fmt.Printf("\n%T", mychanl2) 
}

輸出:

<-chan string
chan<- string

將雙向通道轉(zhuǎn)換為單向通道

在Go語言中,允許將雙向通道轉(zhuǎn)換為單向通道,換句話說,您可以將雙向通道轉(zhuǎn)換為僅接收或僅發(fā)送通道,但反之亦然。如下面的程序所示:

package main 
  
import "fmt"
  
func sending(s chan<- string) { 
    s <- "nhooo"
} 
  
func main() { 
  
    //創(chuàng)建雙向通道
    mychanl := make(chan string) 
  
        //在這里,sending()函數(shù)將雙向通道轉(zhuǎn)換為僅發(fā)送通道 
    go sending(mychanl) 
  
    //在這里,通道只在goroutine內(nèi)部發(fā)送,而在goroutine之外,通道是雙向的,所以它打印nhooo 
    fmt.Println(<-mychanl) 
}

輸出:

nhooo

單向通道的使用:單向通道用于提供程序的類型安全性,從而使程序產(chǎn)生的錯誤更少。或者,當(dāng)您要創(chuàng)建只能發(fā)送或接收數(shù)據(jù)的通道時,也可以使用單向通道。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清