ホームページ > バックエンド開発 > Golang > チルダ (~) トークンは Go ジェネリックで基になる型を定義するためにどのように機能しますか?

チルダ (~) トークンは Go ジェネリックで基になる型を定義するためにどのように機能しますか?

Susan Sarandon
リリース: 2024-12-13 02:16:10
オリジナル
715 人が閲覧しました

How Does the Tilde (~) Token Work in Go Generics to Define Underlying Types?

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

Go ジェネリックでは、チルダ トークン (~) は定義において重要な役割を果たします。特定の型の基礎となる型。これは ~T の形式で動作し、基になる型として T を共有する型のコレクションを示します。

この概念は、型から派生した型を許可する制約を指定する場合に特に役立ちます。特定の基礎となるタイプ。たとえば、次のインターフェイス制約について考えてみましょう。

type Ordered interface {
    Integer | Float | ~string
}
ログイン後にコピー

この例では、制約は、整数、浮動小数点数、または基になる型が文字列である型のいずれかの型を受け入れることができるインターフェイスを定義します。 。これは、カスタム文字列型を定義する MyString などの型も、基になる型が文字列のままである限り、この制約を満たすことができることを意味します。

Go の基になる型

「基礎となるタイプ」という用語は、特定のタイプの基礎となる基本的なタイプを指します。 Go では、これは型宣言に基づいて決定されます。 int、string、bool などの基本型の場合、その基になる型はその型そのものです。ただし、構造体、スライス、インターフェイスなどの複合型の場合、基になる型は型宣言で参照される型です。

チルダ トークンの使用例

次のコードは、チルダ トークンの使用法を示しています。

type Foo struct {
    n int
}

type ByteSlice []byte

type MyInt8 int8

type MyString string

func echoExact[T ExactSigned](t T) T {
    // Only allows exact types, excluding MyInt8
}

func echo[T constraints.Signed](t T) T {
    // Allows types with underlying type int8, including MyInt8
}
ログイン後にコピー

この例では、 ExactSigned は正確な型のみを使用し、MyInt8 は除きます。一方、constraints.Signed では、~int8 のような近似要素が含まれているため、MyInt8 を使用できます。

注: チルダ トークンの制限

チルダ トークンは型パラメータと一緒に使用できません。たとえば、次のコードは無効です:

type AnyApprox[T any] interface {
    ~T
}
ログイン後にコピー

以上がチルダ (~) トークンは Go ジェネリックで基になる型を定義するためにどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート