Go のタイプに依存しないチャネル
質問:
Go では、次のことが可能ですか?単一のチャネルを通じて複数の種類のデータを送信しますか?
例:
次のコードは、チャネルを通じてさまざまな種類のデータを送信しようとします: http://play.golang。 org/p/7p2Bd6b0QT.
答え:
はい、Go では型に依存しないチャネルを作成できます。チャネルを通じて複数のタイプを送信するには、次を使用します。
greet := make(chan pet)
この変更により、ペット インターフェイスを実装する任意のタイプを送信できるようになります。
汎用データの送信:
完全に汎用的なデータを送信する必要がある場合は、タイプ chan インターフェースのチャネルを作成し、リフレクションを使用して受信したデータのタイプを決定します。
例:
ch := make(chan interface{}) go func() { select { case p := <-ch: fmt.Printf("Received a %q", reflect.TypeOf(p).Name()) } }() ch <- "this is it"
型スイッチの使用:
リフレクションの代わりに、次のような select ステートメントで型スイッチを使用できます:
p := <-ch switch p := p.(type) { case string: fmt.Printf("Got a string %q", p) default: fmt.Printf("Type of p is %T. Value %v", p, p) }
以上がGo チャネルは複数のデータ型を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。