Go 1.18에서는 제네릭이 도입되어 향상된 오류 처리 가능성을 제공합니다. 'Either[A,B]' 유형을 생성하면 유형 A 또는 B 중 하나일 수 있는 값을 나타내는 것이 가능해집니다.
이 접근 방식은 '일반' 유형을 모두 반환하는 기존 Go 관용어와 다릅니다. ' 값과 오류 값. 여기서 nil 오류는 성공적인 반환을 나타냅니다. 그러나 원하는 동작이 값이 둘 다 아닌 A 또는 B임을 전달하는 것이라면 문제가 될 수 있습니다.
인터페이스 메서드 제한 극복
인터페이스 메소드에는 유형 매개변수가 없어야 한다는 제한으로 인해 Switch 메소드에 대한 유형 매개변수를 사용하여 인터페이스를 정의하는 데 실패했습니다. 이를 회피하기 위한 대안적인 접근 방식은 Optionality 개념을 도입하는 것입니다.
Optionality와 두 가지 유형
Optional 유형은 다음을 갖는 인터페이스로 정의할 수 있습니다. 값과 nil 오류를 반환하거나 값이 없으면 오류를 반환하는 get() 메서드입니다. 그런 다음 선택성 개념의 관점에서 Each 유형을 정의할 수 있습니다.
type Either[A, B any] interface { is_left() bool is_right() bool find_left() Optional[A] find_right() Optional[B] }
이 접근 방식을 사용하면 Each 유형을 왼쪽 및 오른쪽 변형으로 구현할 수 있습니다. 이는 A 또는 유형 값의 존재를 나타냅니다. B.
type Left[A, B any] struct { data A } type Right[A, B any] struct { data B }
실제 예시
다음 예시 실제 동작 중인 Each 유형을 보여줍니다.
var e1 Either[int, string] = left[int, string](4143) var e2 Either[int, string] = right[int, string]("G4143") ... if e1.is_left() { if l, err := e1.find_left().get(); err == nil { fmt.Printf("The int is: %d\n", l) } else { fmt.Fprintln(os.Stderr, err) } } ...
이 코드는 Each 값을 효과적으로 캡처하고 처리하며, Optionality 개념이 Go에서 오류를 처리하거나 선택적 값을 나타내는 유연하고 표현적인 방법을 제공하는 방법을 보여줍니다.
위 내용은 두 가지 유형 중 하나를 사용하여 Generics가 Go에서 오류 처리를 어떻게 개선할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!