インターフェイス メソッドでの型パラメーターの使用
Go で汎用データ構造を実装しようとしましたが、イテレータ インターフェイスの定義中にエラーが発生しました型パラメータを取るメソッドを使用します。この記事では、この問題に対処し、解決策を示します。
インターフェイス定義エラー
最初のコードでは、関数型パラメーターを取るメソッドを使用してインターフェイスが定義されており、これにより次のような問題が発生しました。エラー:「関数型には型パラメータを含めることはできません。」同様に、型パラメータをメソッドに移動すると、「メソッドには型パラメータを含めることはできません」というエラーが発生しました。
解決策: 汎用インターフェイス定義
エラーで示唆されているように, Methoden は専用の型パラメータを持つことができません。代わりに、解決策は、インターフェイス タイプ自体に type パラメータを指定することです。これにより、インターフェイス本体内のメソッドで type パラメーターを使用できるようになります。
修正されたコード:
type Iterator[T any] interface { ForEachRemaining(action func(T) error) error // other methods }
インターフェイス タイプで type パラメーターを定義すると、それを で使用できるようになりました。期待どおりのメソッド:
type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil }
使用例
次の例汎用イテレータ インターフェイスの使用法を示します。
package main import ( "fmt" "collection" ) type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil } func main() { myIterator := &MyIterator[int]{} _ = myIterator.ForEachRemaining(func(num int) error { fmt.Println(num) return nil }) }
このコードは、汎用イテレータ MyIterator を定義し、それを使用して整数のスライスを反復処理し、各値を出力します。
以上がGo インターフェイス メソッドで型パラメータを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。