インターフェース宣言とそれを実装する多くの構造体があります
リーリーdatac,d,e...
これらの datax
構造体インスタンスを type dataslice []datainterface
今、datax
を取得したい場合は、次のようにできます:
ここには明らかに重複したコードがたくさんあります:
リーリーそこで、ジェネリックを使用してこの問題を解決できると考え、この関数を定義しました:
リーリーしかし、エラーが発生しました: 不可能な型アサーション: '*t' は 'datainterface
それでは、これは本当に不可能なのか知りたいのですが?それとも他の方法で実現できるのでしょうか?
ニーズを満たすために次のコードを使用できるはずです:
リーリーまず、dataa
と datab
構造のみを考慮するようにコードを簡略化しました。次に、メソッドに渡される実際のインスタンスの状態を変更していないため、Pointer Receiver を Value Receiver に変更しました。この変更により、getdatax
は正常に動作し、同様の構造に関するすべての情報を取得できるようになりました。
これで問題が解決した場合、または他に何か必要な場合は、お知らせください。ありがとうございます。
以上がジェネリックスを使用してインターフェイスを指定された型に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。