Go 1.18에서 형식화된 제네릭을 사용하여 객체 생성
Go 1.18에서는 제네릭을 사용하여 모든 데이터 유형에서 작동하는 함수를 생성할 수 있습니다. 그러나 일반 함수 내에서 특정 유형의 새 객체를 생성하려면 특정 구문이 필요합니다.
Create 함수 구현
예를 들어, 다음과 같은 함수 "Create"를 생각해 보세요. "Apple" 구조체의 새 인스턴스를 만들어야 합니다. 제네릭에서 이를 달성하려면:
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How to create non-nil fruit here? return nil // Placeholder, don't return nil } type Apple struct { color string }
접근 방법 1: 유형 변수 사용
"Apple"이 포인터 유형이 아닌 경우 유형 변수를 선언할 수 있습니다. 해당 주소가 반환되었습니다.
func (f FruitFactory[T]) Create() *T { var a T // Declare variable of type T return &a // Return address of variable }
접근 2: "new" 사용 함수
또는 "new" 함수를 사용하여 새 객체를 생성할 수 있습니다:
func (f FruitFactory[T]) Create() *T { return new(T) }
포인터 유형 처리
"FruitFactory"가 포인터 유형으로 인스턴스화되는 경우 더 관련된 접근 방식은 다음과 같습니다. 필요:
// Constraining type to its pointer type type Ptr[T any] interface { *T } // Type parameters: FruitFactory (pointer type), FruitFactory (non-pointer type) type FruitFactory[T Ptr[U], U any] struct{} func (f FruitFactory[T,U]) Create() T { var a U // Declare non-pointer type variable return T(&a) // Convert to pointer type } type Apple struct { color string }
이러한 접근 방식을 따르면 Go 1.18의 제네릭을 사용하여 모든 유형의 새 객체를 생성할 수 있습니다.
위 내용은 Go 1.18의 일반 함수 내에서 특정 유형의 개체를 어떻게 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!