>백엔드 개발 >Golang >Golang 제네릭을 사용하여 사용자 정의 유형을 만드는 방법은 무엇입니까?

Golang 제네릭을 사용하여 사용자 정의 유형을 만드는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-06-02 10:45:59640검색

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

Golang 제네릭을 사용하여 사용자 정의 유형 생성

Golang 1.18에는 재사용성과 유지 관리가 용이한 코드를 생성하는 데 도움이 되는 유형이 지정된 매개변수화된 코드를 생성하는 방법인 제네릭이 도입되었습니다. 이를 통해 유형의 인스턴스를 생성할 때 특정 유형으로 대체할 수 있는 유형 자리 표시자로 유형을 정의할 수 있습니다.

사용자 정의 유형 정의

사용자 정의 유형을 만들려면 type 키워드와 유형 이름 및 유형 매개변수를 사용할 수 있습니다. 유형 매개변수는 꺾쇠괄호 a8093152e673feb7aba1828c43532094로 묶입니다. 예를 들어, 모든 유형의 값 쌍을 저장하는 Pair라는 유형을 만들 수 있습니다. type 关键字,后跟类型名称和类型参数。类型参数用尖括号 a8093152e673feb7aba1828c43532094 括起来。例如,我们可以创建名为 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 는 유형 매개변수로, 어떤 유형으로도 대체될 수 있음을 나타냅니다.
    • structfirstsecond라는 두 개의 필드를 포함하는 구조를 정의합니다.
    🎜🎜유형 인스턴스 생성🎜🎜사용자 정의 유형이 정의되면 유형 매개변수를 지정하여 해당 유형의 인스턴스를 생성할 수 있습니다. 예를 들어, 문자열과 정수를 저장하기 위한 Pair 인스턴스를 생성하려면 다음 코드를 사용할 수 있습니다. 🎜rrreee🎜실용적인 예🎜🎜Generics에는 Golang에 많은 실용적인 응용 프로그램이 있습니다. 일반적인 경우는 다양한 유형에서 작동할 수 있는 일반 함수나 메서드를 만드는 것입니다. 예를 들어, 두 가지 다른 유형의 값을 바꾸는 Swap 함수를 만들 수 있습니다: 🎜rrreee🎜 이 함수를 사용하려면 두 가지 다른 유형의 포인터를 인수로 전달할 수 있습니다: 🎜rrreee 🎜Notes🎜
      🎜Type 매개변수는 매개변수가 모든 유형일 수 있음을 나타내는 any 키워드를 사용해야 합니다. 🎜🎜유형 매개변수는 유형 별칭이나 인터페이스일 수 없습니다. 🎜🎜유형 매개변수에는 유형 제약 조건이 있을 수 없습니다. 🎜🎜

    위 내용은 Golang 제네릭을 사용하여 사용자 정의 유형을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.