>백엔드 개발 >Golang >Go 1.18의 Generics는 프로그램 충돌을 일으키지 않고 형식화된 값을 생성하는 문제를 어떻게 해결할 수 있습니까?

Go 1.18의 Generics는 프로그램 충돌을 일으키지 않고 형식화된 값을 생성하는 문제를 어떻게 해결할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-06 01:29:09830검색

How Can Generics in Go 1.18 Solve the Problem of Creating Typed Values Without Causing Program Crashes?

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:

  1. 선언적 할당: 유형이 지정된 변수를 선언하고 해당 주소를 반환합니다.
func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}
  1. 새로 초기화 키워드: new를 활용하여 할당 및 초기화 object:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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