Golang は静的に型付けされたプログラミング言語であり、ジェネリックスの実装プロセスにおいて常に大きな注目を集めてきました。最近、Golang チームはジェネリックの設計において大きな進歩を遂げ、開発者が「任意の」型のジェネリックのフィールドにアクセスできるようになりました。この新機能は、Golang に優れた柔軟性とスケーラビリティをもたらします。次に、PHP エディター Xigua が、Golang の「任意の」型ジェネリックスのフィールドにアクセスする方法とアプリケーション シナリオを詳しく紹介します。
ジェネリック型が any
であるサードパーティ関数を使用しています。関数は渡された型のオブジェクトを返し、私自身のコードはその戻りに対して動作します。
型 HasID
のジェネリックを受け入れ、それをサードパーティ関数に渡す独自のジェネリック関数を作成しようとしています。ただし、サードパーティ関数の戻り値の ID
フィールドにアクセスしようとすると、エラーが発生します。
これを正しく入力するにはどうすればよいですか?
type HasID struct { ID string `json:"id"` } func ThirdPartyFunc[T any]() T { // do some stuff return someThing // of type T } func MyFunc[U HasID]() { thingWithID := ThirdPartyFunc[U]() fmt.Println(thingWithID.ID) // undefined (type U has no field or method ID) }
@mkoprivaのコメントに同意しますが、制約のフィールドを定義できないため、それらのフィールドにアクセスできない可能性があると思います。型パラメータ。
(おそらく Go 1.19 では変更されていません、笑)
物事をシンプルにするために、通常と同じようにしてください:
リーリーhttps://www.php.cn/link/bddcda5d65fcfdec9de3838794a77265
ただし、これをインターフェースとして定義すると、そのメソッドにアクセスできるようになります。
リーリーhttps://www.php.cn/link/46dfb1fd21d4e16401260f54d2b6a88a
構造体を処理するには、型変換を行う必要があります。
リーリー追記 - 2022 年 2 月から未解決の問題があります - https://github .com/golang/go/issues/51259
追伸 - ああ、今気づきました... - ジェネリックスを使用して構造体フィールドにアクセスする方法 (型 T にはフィールドやメソッドがありません)?
以上がGolang: 「任意の」タイプのジェネリックのフィールドにアクセスするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。