>백엔드 개발 >Golang >Go에서 일반 유형에 대한 기본값 반환을 어떻게 처리할 수 있나요?

Go에서 일반 유형에 대한 기본값 반환을 어떻게 처리할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-31 18:57:22532검색

How Can I Handle Default Value Returns for Generic Types in Go?

Go에서 일반 유형에 대한 기본 값 반환 구현

Go에서는 언어에 null 값이 없기 때문에 빈 값이나 기본값을 반환할 때 문제가 발생합니다. 제네릭 유형.

Nil 반환의 제한

다음 제네릭 목록을 고려하세요. 구현:

type mylist[T any] struct {
    first *node[T]
}

type node[T any] struct {
    data T
    next *next[T]
}

이 예에서는 목록에서 첫 번째 요소를 꺼내고 검색하는 메서드를 정의할 수 있습니다.

func (list *mylist[T]) pop() T {
    if list.first != nil {
        data := list.first.data
        list.first = list.first.next
        return data
    }
    return nil
}

func (list *mylist[T]) getfirst() T {
    if list.first != nil {
        return list.first.data
    }
    return nil
}

그러나 이 코드를 컴파일할 때 컴파일러는 오류: "return 문에서 T 값으로 nil을 사용할 수 없습니다." 이는 Go가 일반 유형 변수 T에 nil을 암시적으로 할당할 수 없기 때문에 발생합니다.

해결책: 0 값 반환

nil을 반환하는 대신 사용된 특정 유형 T에 대해 0 값을 반환할 수 있습니다. 일반 목록에 있습니다. 0 값은 다음과 같습니다.

  • 포인터의 경우 Nil
  • 문자열의 경우 빈 문자열
  • 정수 및 부동 소수점 숫자의 경우 0

이를 달성하기 위해 T 유형의 변수를 선언하고 반환할 수 있습니다. it:

func getZero[T any]() T {
    var result T
    return result
}

이제 이 함수를 사용하여 모든 일반 유형에 대해 0 값을 반환할 수 있습니다. 예를 들어 다양한 유형에 대해 테스트할 수 있습니다.

i := getZero[int]()
fmt.Printf("%T %v\n", i, i)

s := getZero[string]()
fmt.Printf("%T %q\n", s, s)

p := getZero[image.Point]()
fmt.Printf("%T %v\n", p, p)

f := getZero[*float64]()
fmt.Printf("%T %v\n", f, f)

출력:

int 0
string ""
image.Point (0,0)
*float64 <nil>

이 솔루션을 사용하면 Go의 모든 일반 유형에 대해 적절한 기본값 또는 빈 값을 반환할 수 있습니다.

위 내용은 Go에서 일반 유형에 대한 기본값 반환을 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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