Go のさまざまなランタイム タイプ用の汎用コンテナー
この記事では、チャネルを介してデータをさらに処理する goroutine に送信するという課題について説明します。ただし、チャネルがすべてのタイプを処理する必要があります。このニーズに対処するために、Go 1.18 で導入されたジェネリックの使用を調査します。
ジェネリック コンテナの定義
目標は、任意のデータ型を受け入れるジェネリック チャネルを作成することです。 。ただし、ジェネリックを使用した最初の作業では、特定のタイプを指定せずにジェネリック チャネルをインスタンス化できないため、コンパイル エラーが発生しました。
ジェネリックの代わりにインターフェイスを使用する
考えられる解決策の 1 つは、ジェネリックを任意のデータ値を保持できるインターフェイス タイプに置き換えることです。{}ただし、このアプローチでは、複雑な入れ子構造を扱うときに複雑さと解析の課題が生じます。
ジェネリックの理解
問題は、このコンテキストでのジェネリックの使用目的を誤解していることに起因します。あらゆる型を受け入れることができるチャネルが必要かもしれませんが、これはジェネリック チャネルでは実現できません。
ジェネリックの正しい使用法
一般に、ジェネリックを扱うときは、 chan T のようなパラメータ化された型を定義し、それを使用する前に具象型パラメータでインスタンス化します。たとえば、次のような具体的なチャネルを作成します。
c := make(chan int)
動的データ型のソリューション
実行時のデータ型のバリエーションを処理するには、チャネルを使用できます。型としてインターフェース{}を使用します:
c := make(chan interface{})
この場合、データをチャネルに送信し、型アサーションを実行しますまたは、さまざまなデータ型を処理するためのその他の処理。
以上がGo ジェネリックはチャネル内のさまざまなランタイム データ型をどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。