Go 1.18에서 제네릭을 활용하여 유형화된 값을 생성하는 방법
Go 프로그래밍에서 제네릭을 사용하면 다양한 유형에서 작동하는 코드를 생성할 수 있습니다. 명시적인 캐스팅이나 유형 주장이 필요하지 않습니다. 이 문서에서는 Go 1.18에서 제네릭을 활용하여 입력된 값의 새 개체를 만드는 방법을 살펴봅니다.
배경: Fruit Factory 예제
다음과 같은 단순화된 "Fruit Factory" 예제를 고려해보세요. 일반적으로 과일의 새로운 인스턴스를 생성하려고 시도합니다.
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How do we create a non-nil fruit here? // Returning nil crashes the example. return nil } type Apple struct { color string }
이 예에서 작업은 다음과 같습니다. T 유형(예: Apple 유형의 경우 *Apple)의 새 인스턴스를 생성하려면 Create 함수를 완료하세요. 그러나 단순히 nil을 반환하는 것만으로는 충분하지 않으며 개체의 속성에 액세스할 때 프로그램이 충돌하게 됩니다.
해결책: 형식화된 개체 생성
Go에서 제네릭을 사용하여 입력된 값의 새 인스턴스 1.18:
func (f FruitFactory[T]) Create() *T { var a T return &a }
func (f FruitFactory[T]) Create() *T { return new(T) }
이 솔루션을 사용하면 함수가 포인터가 아닌 값(a 또는 new(T))을 생성하고 필요한 경우 주소( &a).
구현예
"과일공장"에서 예:
func (f FruitFactory[T]) Create() *T { var a T return &a } func example() { appleFactory := FruitFactory[Apple]{} apple := appleFactory.Create() apple.color = "red" // No panic now }
이 수정을 통해 분할 오류 없이 새로운 Apple 개체를 생성하고 해당 속성을 설정할 수 있습니다.
결론
Go 1.18의 제네릭을 사용하면 입력된 값을 사용한 프로그래밍이 크게 단순화되었습니다. 선언적 할당이나 new 키워드를 활용하면 모든 유형의 새 인스턴스를 원활하게 생성할 수 있으므로 수동 캐스팅 및 오류가 발생하기 쉬운 유형 어설션이 필요하지 않습니다.
위 내용은 Go 1.18의 Generics는 프로그램 충돌을 일으키지 않고 형식화된 값을 생성하는 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!