Go에서는 언어에 null 값이 없기 때문에 빈 값이나 기본값을 반환할 때 문제가 발생합니다. 제네릭 유형.
다음 제네릭 목록을 고려하세요. 구현:
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을 암시적으로 할당할 수 없기 때문에 발생합니다.
nil을 반환하는 대신 사용된 특정 유형 T에 대해 0 값을 반환할 수 있습니다. 일반 목록에 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!