ホームページ > バックエンド開発 > Golang > ジェネリックスを使用してインターフェイスを指定された型に変換する方法

ジェネリックスを使用してインターフェイスを指定された型に変換する方法

WBOY
リリース: 2024-02-06 08:25:11
転載
1048 人が閲覧しました

ジェネリックスを使用してインターフェイスを指定された型に変換する方法

質問内容

インターフェース宣言とそれを実装する多くの構造体があります

リーリー

datac,d,e...

も含まれます

これらの datax 構造体インスタンスを type dataslice []datainterface

に保存します

今、datax を取得したい場合は、次のようにできます:

リーリー

ここには明らかに重複したコードがたくさんあります:

リーリー

そこで、ジェネリックを使用してこの問題を解決できると考え、この関数を定義しました:

リーリー

しかし、エラーが発生しました: 不可能な型アサーション: '*t' は 'datainterface

を実装していません

それでは、これは本当に不可能なのか知りたいのですが?それとも他の方法で実現できるのでしょうか?


正解


ニーズを満たすために次のコードを使用できるはずです:

リーリー

まず、dataadatab 構造のみを考慮するようにコードを簡略化しました。次に、メソッドに渡される実際のインスタンスの状態を変更していないため、Pointer ReceiverValue Receiver に変更しました。この変更により、getdatax は正常に動作し、同様の構造に関するすべての情報を取得できるようになりました。

これで問題が解決した場合、または他に何か必要な場合は、お知らせください。ありがとうございます。

以上がジェネリックスを使用してインターフェイスを指定された型に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート