ホームページ >バックエンド開発 >Golang >Go ジェネリックにおけるチルダ トークン (~) の使用法は何ですか?

Go ジェネリックにおけるチルダ トークン (~) の使用法は何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-26 10:59:09277ブラウズ

What is the Use of the Tilde Token (~) in Go Generics?

Go ジェネリクスのチルダ トークン (~) を理解する

Go のチルダ トークン (~) の導入は、ジェネリックに新しい次元をもたらしましたプログラミング。このトークンを使用すると、開発者は共通の基礎となる型を共有する型を定義できます。

チルダ トークンとは何ですか?

Go では、チルダ トークン (~) はセットを表します。基になる型が T であるすべての型。たとえば、~T は、基になる型が次のすべての型を示します。 T.

なぜ便利ですか?

チルダ トークンは、特定の基になる型を受け入れることができるジェネリック インターフェイスを定義する柔軟な方法を提供します。たとえば、Ordered インターフェイスは次のように定義できます。

type Ordered interface {
  Integer | Float | ~string
}

このインターフェイスは、型が Integer、Float、または基になる型が文字列である型のいずれかである必要があることを指定します。これにより、MyString などの基になる文字列型を持つカスタム型がこのインターフェイスを満たすことができます。

基になる型

基になる型の概念は、チルダを理解するために重要です。トークン。型 T の基になる型は通常、T 自体です。

  • 事前に宣言された数値、ブール型、または文字列型の場合、基になる型は型自体です。
  • 複合型の場合(構造体、スライスなど)、基礎となる型は、複合型がその型で参照する型です。宣言。

実践例

チルダ トークンを使用して、特定のインターフェイスを満たすことができる型を制限する制約を作成できます。たとえば、ExactSigned と呼ばれる制約は、正確に int、int8、int16、int32、または int64 の型のみを許可するように定義できます。このような制約では、MyInt8 のようなカスタム型は許可されません。

一方、constraints.Signed と呼ばれる制約は、~ 近似要素を使用して、基礎となる型が int8 である型を許可します。これにより、MyInt8 などのカスタム型が制約を満たすことができます。

Syntactic Sugar

チルダ トークンは、共用体、匿名制約、さらには構文シュガーでも使用できます。特に、単一タイプの近似要素を使用して制約の記述を簡素化できます。

たとえば、次の匿名制約は同等です:

func echoFixedSize[T interface { ~int8 | ~int32 | ~int64 }](t T) { /* ... */ }

func echoFixedSizeSugar[T ~int8 | ~int32 | ~int64](t T) { /* ... */ }

func echoFixedSizeSugarOne[T ~int8](t T) { /* ... */ }

一般的な使用例

近似要素は、メソッドを持つ必要がある複合型を操作する場合に特に便利です。たとえば、メソッドを ByteSeq 型に対して宣言できるようにするには、その基になる型を次の識別子にバインドする必要があります。

type ByteSeq []byte

func (b ByteSeq) DoSomething() {}

制約で ~[]byte を指定すると、ByteSeq をインスタンス化できるようになります。

制限事項

です。チルダ トークンは型パラメータでは使用できないことに注意することが重要です。たとえば、次のコードは無効です:

type AnyApprox[T any] interface {
  ~T
}

以上がGo ジェネリックにおけるチルダ トークン (~) の使用法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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