> 백엔드 개발 > Golang > Go 일반 함수에서 슬라이스 결합을 처리하는 방법은 무엇입니까?

Go 일반 함수에서 슬라이스 결합을 처리하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-24 14:15:09
원래의
204명이 탐색했습니다.

How to Handle Unions of Slices in Go Generic Functions?

인터페이스 제약 조건이 있는 일반 함수의 슬라이스 합집합 처리

정수 슬라이스 또는 정수 슬라이스에서 작동하는 일반 함수가 필요하다고 가정해 보겠습니다. 수레 조각. 이를 구현하려면 아래와 같이 제네릭 및 인터페이스 제약 조건을 활용할 수 있습니다.

package main

import "fmt"

// NumberSlice defines an interface for either slice of integers or slice of floats.
type NumberSlice interface {
    []int | []float64
}

// add is a generic function that iterates over a slice of NumberSlice and prints its values.
func add[N NumberSlice](n N) {
    for _, v := range n {
        fmt.Println(v)
    }
}

func main() {
    ints := []int{1, 2}
    add(ints)

    floats := []float64{3.14, 1.618}
    add(floats)
}
로그인 후 복사

그러나 위 코드를 실행하려고 하면 다음 오류가 발생할 수 있습니다.

cannot range over n (variable of type N constrained by NumberSlice) (N has no core type)
로그인 후 복사

이 오류는 NumberSlice 인터페이스에 핵심 유형이 없기 때문에 발생합니다. 인터페이스의 핵심 유형은 인터페이스의 모든 유형이 상속해야 하는 단일 기본 유형입니다. NumberSlice는 정수 슬라이스와 부동 소수점 슬라이스를 모두 허용하므로 이 요구 사항을 충족하지 않습니다.

이 문제를 해결하려면 슬라이스 대신 기본 유형을 사용하여 인터페이스를 정의할 수 있습니다.

type Number interface {
    int | float64
}

func add[N Number](n []N) {
    for _, v := range n {
        fmt.Println(v)
    }
}
로그인 후 복사

이 수정된 함수는 Number 요소 조각을 매개변수로 사용하여 정수와 부동소수점을 모두 효율적으로 처리할 수 있게 해줍니다.

위 내용은 Go 일반 함수에서 슬라이스 결합을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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