Go のジェネリックス: インターフェイス メソッドのパラメーターの制限
Go 1.18beta2 では、ジェネリック パラメーターを使用してインターフェイス メソッドを定義するときに、次のような問題が発生する可能性があります。 「インターフェイス メソッドには型パラメーターが必要ありません。」というエラーが表示されます。この記事では、この制限に光を当て、考えられる解決策を検討します。
インターフェイス メソッドで型パラメータが許可されないのはなぜですか?
この制限の理由は設計に根ざしています。ジェネリックスと型パラメーターに関する考慮事項。インターフェイスはメソッドのシグネチャと動作のセットのコントラクトを定義しますが、ジェネリック メソッドは型を抽象化するメカニズムを提供します。インターフェイス メソッドで型パラメーターを許可すると、以下の点で複雑さが生じます。
制限の克服
インターフェイス メソッドで型パラメータを直接使用することはできませんが、代替ソリューションがあります。
型パラメータをインターフェイス定義に移動します:
を宣言する代わりに、インターフェイス メソッド内の type パラメータをインターフェイス定義自体に移動します。これにより、インターフェイスは特定の型パラメータに基づいて特殊化できます。
type Reader[V Unmarshaler] interface { Read(bucket []byte, k ...[]byte) ([][]byte, error) ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error) }
結論
インターフェイス メソッドの型パラメータの制限は、確実に行うための意図的な設計上の決定です。 Go ジェネリックスのインターフェイスの明確さ、パフォーマンス、一貫した実装。最初は問題が生じるかもしれませんが、上記で提供した代替ソリューションは、この制限を回避し、コード内でジェネリックの力を活用する実用的な方法を提供します。
以上がなぜ Can't Go のインターフェイス メソッドに型パラメータがあるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。