>백엔드 개발 >Golang >핵심 유형 없이 Go Generic 함수에서 슬라이스 결합을 어떻게 반복할 수 있나요?

핵심 유형 없이 Go Generic 함수에서 슬라이스 결합을 어떻게 반복할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-23 15:23:10626검색

How Can I Iterate Over a Union of Slices in a Go Generic Function Without a Core Type?

핵심 유형 없이 일반 함수에서 슬라이스 합집합 반복

Go 1.18에서는 일반 함수를 사용하여 유형 작업이 가능합니다. 동적으로. 그러나 다양한 유형으로 구성된 슬라이스를 반복할 때 문제가 발생하면 추가 고려 사항이 필요합니다.

유형 제약 조건을 처리할 때는 핵심 유형의 개념을 이해해야 합니다. 인터페이스의 모든 유형에 대해 단일 기본 유형이 존재하거나 모든 채널이 동일한 요소 유형 및 방향을 가질 때 핵심 유형이 존재합니다.

초기 코드 예에서:

type NumberSlice interface {
    []int64 | []float64
}

인터페이스 제약조건 NumberSlice는 여러 기본 유형([]int64 및 []float64)으로 구성되어 있으므로 핵심 유형이 없습니다. 즉, 이 인터페이스의 조각을 범위로 지정할 수 없습니다.

이 장애물을 극복하기 위해 대신 기본 유형을 요구하도록 인터페이스를 수정할 수 있습니다.

type Number interface {
    int64 | float64
}

func add[N Number](n []N) {
    for _, v := range n {
        fmt.Println(v)
    }
}

이렇게 하면 다음과 같은 조각을 선언할 수 있습니다. int64 또는 float64를 사용하여 일반 함수 내에서 반복합니다.

또는 코어를 사용하여 보다 명시적인 인터페이스를 정의할 수 있습니다. 유형:

type NumberSlice[N int64 | float64] interface {
    ~[]N
}

func add[S NumberSlice[N], N int64 | float64](n S) {
    for _, v := range n {
        fmt.Println(v)
    }
}

이 접근 방식은 인터페이스가 NumberSlice[N]을 구현하는 모든 유형에 대해 알려진 기본 유형인 []N을 갖도록 보장합니다.

이러한 조정을 통해 성공적으로 반복할 수 있습니다. 일반 함수 내에서 슬라이스의 합집합을 사용하여 코드의 유연성을 높입니다.

위 내용은 핵심 유형 없이 Go Generic 함수에서 슬라이스 결합을 어떻게 반복할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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