ホームページ > バックエンド開発 > Golang > Go Generics の型結合制約で共有メソッドをどのように使用できますか?

Go Generics の型結合制約で共有メソッドをどのように使用できますか?

Linda Hamilton
リリース: 2024-12-20 15:38:14
オリジナル
711 人が閲覧しました

How Can Shared Methods Be Used with Go Generics' Type Union Constraints?

Go ジェネリック: 型結合の共有メソッドのロックを解除する

Go の新しいジェネリック機能では、型結合制約により複数の型をバインドできます。単一のジェネリック型パラメーター。ただし、これらの型間で共有メソッドをどのように利用できるのかという疑問が生じます。

初期試行とコンパイラ エラー

<br>type AB Interface { </p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
ログイン後にコピー

}

関数 (a *A) some() bool {

return true
ログイン後にコピー

}

func (b *B) some() bool {

return false
ログイン後にコピー

}

関数 some[T AB](x T) bool {

return x.some()   // undefined
ログイン後にコピー

}

上記のコードは、関数 some で共有の some メソッドを使用しようとしますが、コンパイラがどちらのメソッドを使用するかを判断できないため、エラーが発生します。呼び出すメソッド。

インターフェイスを使用した回避策制約

この制限を克服するには、共有メソッドをインターフェイス制約に直接追加できます:

<br>タイプ AB インターフェイス {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
some() bool
ログイン後にコピー

}

func some[TAB](x T) bool {

return x.some()   // works
ログイン後にコピー

}

これにより、ジェネリック型 T が some メソッドを含むインターフェイス制約を満たす必要があります。

Go 1.18 の制限

次のことが重要ですこの回避策は Go 1.18 の制限による一時的な措置であることに注意してください。 Go 仕様では共有メソッドを型共用体で使用できますが、現在のコンパイラ実装では制約インターフェイスで明示的に宣言されたメソッドに制限されています。

Go 1.19 での解決

Go 1.18 リリースノートはこの制限を認めており、Go 1.19 でそれを削除し、型共用体の共有メソッドに直接アクセスできるようにする計画を明示しています。この改善により、Go ジェネリックの表現力と柔軟性が強化されます。

以上がGo Generics の型結合制約で共有メソッドをどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:Go の埋め込みと継承: 構成か複雑か? 次の記事:Bufconn を使用して Go で gRPC サービスを効果的に単体テストする方法
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート