ホームページ  >  記事  >  バックエンド開発  >  Go のチャネル タイプは非依存ですか?

Go のチャネル タイプは非依存ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 13:00:29566ブラウズ

Is Go's Channel Type Agnostic?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。