Go の型に依存しないチャネル
質問:
複数の異なるデータ型を送信できますかGo の単一の汎用チャネル経由ですか?
答え:
はい、可能です。プレイグラウンド リンクで提供されている例を使用すると、次の構文を使用してチャネルを作成できます。その後、ペット インターフェースを実装する任意の型をこのチャネルを通じてシームレスに送信できます。
完全な型非依存性を実現するには、タイプ chan インターフェースのチャネルを使用できます。{}このようなチャネルから値を受信する場合、リフレクションを使用してその型を決定できます。
例:
この概念を示す簡略化された例 (慣用的ではない可能性があります) :
<code class="go">ch := make(chan interface{}) go func() { select { case p := <-ch: fmt.Printf("Received a %q", reflect.TypeOf(p).Name()) } }() ch <- "this is it"</code>
改良例:
BurntSushi5 が提案する代替アプローチでは、タイプ スイッチを使用します:
<code class="go">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) }</code>
以上がGo のチャネル タイプは非依存ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。