Golang ジェネリックを使用してカスタム型を作成するにはどうすればよいですか?

WBOY
リリース: 2024-06-02 10:45:59
オリジナル
561 人が閲覧しました

如何使用 Golang 泛型创建自定义类型?

Golang ジェネリックスを使用してカスタム型を作成する

Golang 1.18 では、再利用性と保守性の高いコードの作成に役立つ、型付きパラメーター化コードを作成する方法であるジェネリックスが導入されています。これにより、型のインスタンスを作成するときに特定の型に置き換えることができる型プレースホルダーを使用して型を定義できます。

カスタム タイプを定義する

カスタム タイプを作成するには、type キーワードの後に​​タイプ名とタイプ パラメータを使用します。型パラメータは山かっこ <> で囲まれます。たとえば、任意の型の値のペアを格納する Pair という型を作成できます: type 关键字,后跟类型名称和类型参数。类型参数用尖括号 <> 括起来。例如,我们可以创建名为 Pair 的类型,它存储任意类型的一对值:

type Pair[T1, T2 any] struct {
    first  T1
    second T2
}
ログイン後にコピー

其中:

  • T1T2 是类型参数,表示可以由任何类型替换。
  • struct 定义了一个包含两个字段 firstsecond 的结构体。

创建类型实例

一旦定义了自定义类型,就可以通过指定类型参数来创建它的实例。例如,要创建一个 Pair 实例来存储字符串和整数,我们可以使用以下代码:

pair := Pair[string, int]{"John", 30}
ログイン後にコピー

实战案例

泛型在 Golang 中有许多实际应用。一个常见案例是创建泛型函数或方法,可以在各种类型上操作。例如,我们可以创建一个 Swap 函数,它可以在两种不同的类型上交换值:

func Swap[T1, T2 any](a *T1, b *T2) {
    temp := *a
    *a = *b
    *b = temp
}
ログイン後にコピー

要使用此函数,我们可以传递两种不同类型的指针作为参数:

a := 5
b := "Hello"
Swap(&a, &b)
fmt.Println(a, b) // 输出:"Hello" 5
ログイン後にコピー

注意事项

  • 类型参数必须使用 anyrrreee
  • ここで:
    • T1T2 は型パラメータであり、任意の型に置き換えることができることを示します。
    • struct は、firstsecond の 2 つのフィールドを含む構造体を定義します。
    🎜🎜型インスタンスの作成🎜🎜 カスタム型を定義したら、型パラメーターを指定してそのインスタンスを作成できます。たとえば、文字列と整数を格納する Pair インスタンスを作成するには、次のコードを使用できます: 🎜rrreee🎜実用的な例🎜🎜ジェネリックには、Golang で多くの実用的なアプリケーションがあります。一般的なケースは、さまざまな型を操作できるジェネリック関数またはメソッドを作成することです。たとえば、2 つの異なる型の値を交換する Swap 関数を作成できます: 🎜rrreee🎜 この関数を使用するには、2 つの異なる型のポインタを引数として渡すことができます: 🎜rrreee 🎜Notes🎜
      🎜型パラメータでは、パラメータが任意の型であることを示す any キーワードを使用する必要があります。 🎜🎜型パラメータを型エイリアスまたはインターフェイスにすることはできません。 🎜🎜型パラメータには型制約を含めることはできません。 🎜🎜

    以上がGolang ジェネリックを使用してカスタム型を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!