ホームページ >バックエンド開発 >Golang >ジェネリック インターフェイス メソッドに型パラメータを持たせないのはなぜですか?

ジェネリック インターフェイス メソッドに型パラメータを持たせないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 09:52:11414ブラウズ

Why Can't Go Generics Interface Methods Have Type Parameters?

Go ジェネリクスのインターフェイス メソッドのパラメータ化

バージョン 1.18beta2 の Go ジェネリクスを探索しているときに、開発者は「インターフェイス メソッドには次のパラメータが必要です」というエラーが発生することがあります。型パラメータを受け入れるメソッドを使用してインターフェイスを定義しようとする場合は、「型パラメータ」を使用してください。このエラーは、インターフェイス メソッド定義で型パラメーターを禁止するという設計上の決定に起因します。

この制限の背後にある理由は、曖昧さとパフォーマンスへの影響の可能性にあります。インターフェイス メソッドの型パラメーターは、引数の ID が保持されるかどうか、コンパイル時の徹底的なツリー トラバーサルの必要性、または実行時のパフォーマンスに影響を与えるリフレクションの可能性についての不確実性を引き起こす可能性があります。

さらに、パラメーター化されたメソッドは直接使用できません。インターフェイスを実装すると、混乱が生じる可能性があります。

ただし、インターフェイス内で型パラメーターを使用できるようにする回避策があります。型パラメーターをインターフェイスの型定義に移動します。それ自体。このアプローチでは、Go ジェネリックの設計制限を遵守しながら、必要な機能を維持します。

例:

type Reader[V Unmarshaler] interface {
    Read(bucket []byte, k ...[]byte) ([][]byte, error)
    ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)
}

type Unmarshaler interface {
    UnmarshalKV(v []byte) error
}

以上がジェネリック インターフェイス メソッドに型パラメータを持たせないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。