Go 1.18で導入されたGo Length()
<code class="go">type Length interface { Length() int }</code>次に、このインターフェイスを一般的な関数の制約として使用できます。 これにより、コンパイル時間エラーが防止され、コードの安全性が向上します。
<code class="go">func GenericLength[T Length](t T) int { return t.Length() }</code>演算子を使用して複数のインターフェイスを組み合わせて、より複雑な制約を作成し、複数の方法を実装するためにタイプが必要です。たとえば、Go Genericsでカスタムタイプの制約を使用することの利点
Length
GenericLength
&
カスタムタイプ制約はいくつかの重要な利点を提供します:type StringerLength interface { fmt.Stringer; Length() int }
制約を指定することにより、必要な要件を満たすタイプのみが一般的なコードで使用されることを保証します。これにより、互換性のないタイプによって引き起こされるランタイムエラーのリスクが軽減されます。
<code class="go">type Length interface { Length() int }</code>
これは、StringerAdder
(String()
)とfmt.Stringer
の両方を実装するタイプのみをAdd()
。GenericStringAdder
。爆発:インターフェイスの過剰使用により、インターフェイスが増殖し、コードベースの管理が難しくなります。 多くの高度に専門化されたものを作成する代わりに、明確に定義された再利用可能なインターフェースを努力します。 本質的な要件を表現するシンプルで明確な制約を目指してください。
制約は、コンパイル時にタイプの安全性を確保する一方で、制約で定義されているものを超えてタイプ固有のメソッドにアクセスする必要がある場合は、ジェネリック関数本体内のタイプアサーションが必要になる場合があります。 これは、ランタイムパニックを避けるために慎重に行う必要があります。
以上がGOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。