English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎教程

Golang 制御文

Golang 関数とメソッド

Golang 構造体

Golang スライスと配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang エラ(Error)

Golang その他の雑項

Go 言語の単方向チャネル

よく知られているように、チャネルは並行して動作するgoroutine間の通信メディアであり、そのため、彼らはお互いにデータを送信および受信できます。デフォルトでは、チャネルは双方向のものですが、単方向チャネルを作成することもできます。データを受け信するのみのチャネルやデータを送信するのみのチャネルは、単方向チャネル。単方向チャネルはmake()関数を使用して作成することもできます。以下のように:

//データの受信のみ
c1:= make(<- chan bool)
//データの送信のみに使用
c2:= make(chan<-bool)

単方向チャネルの使用例1:

package main 
  
import "fmt"
  
func main() { 
  
    //データの受信のみに使用
    mychanl1 := make(<-chan string) 
  
    //データの送信のみに使用
    mychanl2 := make(chan<- string) 
  
    //チャネルのタイプを表示 
    fmt.Printf("%T", mychanl1) 
    fmt.Printf("\n%T", mychanl2) 
}

出力:

<-chan string
chan<- string

双方向チャネルを単方向チャネルに変換

Go言語では、双方向チャネルを単方向チャネルに変換することが許可されており、別の言い方をすると、双方向チャネルを単方向の受信または送信チャネルに変換することもできますが、逆方向はできません。以下のプログラムを参照してください:

package main 
  
import "fmt"
  
func sending(s chan<- string) { 
    s <- "w3codebox"
} 
  
func main() { 
  
    //双方向チャネルの作成
    mychanl := make(chan string) 
  
        //ここでは、sending()関数が双方向チャネルを単方向チャネルに変換します 
    go sending(mychanl) 
  
    //ここでは、チャネルはgoroutine内部でのみ送信され、goroutineの外ではチャネルは双方向のものですので、wがプリントされます3codebox 
    fmt.Println(<-mychanl) 
}

出力:

w3codebox

単方向パスウェイの使用:プログラムのタイプセキュリティを提供し、プログラムが生成するエラーを少なくするために、単方向パスウェイを使用します。または、データを送信または受信するだけのパスウェイを作成する場合、単方向パスウェイを使用することもできます。