일반 함수는 Golang의 기존 비제네릭 함수와 어떻게 상호 작용합니까?

PHPz
풀어 주다: 2024-04-16 17:36:01
원래의
623명이 탐색했습니다.

Go에서 일반 함수는 유형 어설션, 유형 별칭 또는 빈 인터페이스를 사용하여 제네릭이 아닌 코드와 상호 작용할 수 있습니다. 유형 주장을 사용하면 값을 특정 유형으로 변환할 수 있습니다. 유형 별칭은 기존 유형의 일반 별칭을 생성하고 빈 인터페이스는 모든 유형의 변수를 나타낼 수 있습니다. 이러한 방법을 통해 제네릭 함수는 제네릭이 아닌 유형의 값을 허용하거나 반환할 수 있으므로 다양한 유형에 걸친 데이터 처리가 가능해집니다.

일반 함수는 Golang의 기존 비제네릭 함수와 어떻게 상호 작용합니까?

Go에서 일반 함수가 제네릭이 아닌 함수와 상호 작용하도록 만드는 방법

Go는 Go 1.18부터 제네릭을 도입하여 유형 및 알고리즘 코드를 재사용할 수 있는 문을 열었습니다. 하지만 새로운 일반 코드는 기존의 비일반 코드와 어떻게 상호 작용합니까?

유형 어설션 사용

유형 어설션은 인터페이스를 특정 유형의 값으로 변환하는 방법을 제공합니다. 이 작업은 스위치 문을 사용하여 수행할 수 있습니다.

func AnyToString(any interface{}) string {
    switch myString := any.(type) {
    case string:
        return myString
    default:
        return "Unknown"
    }
}
로그인 후 복사

이 함수는 임의의 값을 문자열로 변환하려고 시도하며 문자열이 아닌 경우 "알 수 없음"을 반환합니다.

유형 별칭 사용

유형 별칭을 사용하면 기존 유형에 대한 별칭을 만들 수 있습니다. 이를 통해 제네릭이 아닌 유형에 대한 제네릭 별칭을 만들 수 있습니다:

type MyString string

func GenericFunc[T MyString](t T) {}
로그인 후 복사

이제 제네릭 함수 GenericFunc 내에서 제네릭이 아닌 유형 MyString을 사용할 수 있습니다. MyString 在泛型函数 GenericFunc 中:

GenericFunc(MyString("Hello"))
로그인 후 복사

使用空的接口

空的接口可以表示任何类型的变量。这允许我们创建接受或返回任何类型值的泛型函数:

func GenericEmptyInterfaceFunc(empty interface{}) {}
로그인 후 복사

我们可以使用任何类型的值调用此函数:

GenericEmptyInterfaceFunc(10)
GenericEmptyInterfaceFunc("Hello")
로그인 후 복사

实战案例:实现泛型排序

让我们通过对列表进行排序来演示泛型代码与非泛型代码的交互。

// Sort is a generic function that sorts a slice of any type that implements sort.Interface.
func Sort[T sort.Interface](s []T) {
    sort.Sort(s)
}

// IntSlice implements sort.Interface for a slice of int.
type IntSlice []int

func (s IntSlice) Len() int { return len(s) }
func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] }
func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

// StringSlice implements sort.Interface for a slice of string.
type StringSlice []string

func (s StringSlice) Len() int { return len(s) }
func (s StringSlice) Less(i, j int) bool { return s[i] < s[j] }
func (s StringSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

func main() {
    intSlice := IntSlice{10, 5, 7, 3, 11}
    Sort(intSlice)
    fmt.Println(intSlice) // Output: [3 5 7 10 11]

    stringSlice := StringSlice{"Hello", "World", "Go", "Golang"}
    Sort(stringSlice)
    fmt.Println(stringSlice) // Output: [Go Golang Hello World]
}
로그인 후 복사

此代码演示了如何使用泛型函数 Sort rrreee

🎜빈 인터페이스 사용🎜🎜🎜빈 인터페이스는 모든 유형의 변수를 나타낼 수 있습니다. 이를 통해 모든 유형의 값을 허용하거나 반환하는 일반 함수를 만들 수 있습니다. 🎜rrreee🎜 모든 유형의 값으로 이 함수를 호출할 수 있습니다. 🎜rrreee🎜🎜 실제 예: 일반 정렬 구현 🎜🎜🎜 목록을 정렬하여 정렬해 보겠습니다. 일반 코드와 일반 코드가 아닌 코드 간의 상호 작용을 보여줍니다. 🎜rrreee🎜이 코드는 일반 함수 Sort를 사용하여 사용자 정의 유형에 따라 다양한 값 목록을 정렬하는 방법을 보여줍니다. 🎜

위 내용은 일반 함수는 Golang의 기존 비제네릭 함수와 어떻게 상호 작용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿