ホームページ >バックエンド開発 >Golang >Go チャネルは複数のデータ型を処理できますか?

Go チャネルは複数のデータ型を処理できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 13:55:30287ブラウズ

Can Go Channels Handle Multiple Data Types?

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

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