English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
よく知られているように、チャネルは並行して動作する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
単方向パスウェイの使用:プログラムのタイプセキュリティを提供し、プログラムが生成するエラーを少なくするために、単方向パスウェイを使用します。または、データを送信または受信するだけのパスウェイを作成する場合、単方向パスウェイを使用することもできます。