Go、新しいチルダ トークンを理解する ~
Go は、コンテキスト内で重要な意味をもつ新しいトークン、チルダ ~ を導入しました。ジェネリックの。これは、基礎となる型 T を持つすべての型のセットをシンボル表示します。
以下の例:
type Ordered interface { Integer | Float | ~string }
~string は、基礎となる型が string である型のセットを示します。これには、文字列型をラップして追加機能を提供する MyString などのユーザー定義型を含めることができます。
基礎となる型
チルダ トークンは、基礎となる型の概念に依存します。 Go 言語仕様では、各型の基礎となる型を明示的に定義しています。この概念は、~ の有用性を理解する上で非常に重要になります。
次のことを考えてください:
type Foo struct { n int } type MyInt8 int8
ここで、Foo は struct { n int } の基礎となる型を持つ構造体を定義しますが、MyInt8 はint8 のエイリアス。これに int8 の基礎となる型を与えます。
実用的アプリケーション
~ トークンの実際的な意味は、インターフェイスの制約に現れます。 (近似要素を含まない) 正確な要素のみを含むインターフェイス制約では、MyInt8 のようなユーザー定義型は許可されません。
たとえば、インターフェイスを定義するとします。
type ExactSigned interface { int | int8 | int16 | int32 | int64 }
そして関数:
func echoExact[T ExactSigned](t T) T { return t }
MyInt8 を使用して echoExact をインスタンス化することはできません。ただし、制約要素を使用すると、共用体で近似要素を使用することに加えて、 ~int8.
追加機能
などの近似要素を許可するように制約を変更できます。 Go では、構文シュガーの有無にかかわらず、匿名制約でもそれらを許可します。たとえば、次の制約は有効です:
type Signed interface { ~int8 | ~int32 | ~int64 }
近似要素の一般的な使用例の 1 つは、メソッドを必要とするスライスや構造体のような複合型です。このような場合、メソッドを宣言するには識別子のバインドが必要であり、近似要素によりカスタム タイプでのインスタンス化が可能になります。
以上がGo の新しいチルダ (~) トークンはジェネリックスの型制約にどのように影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。