Go Generics: 유형 공용체에서 공유 메소드 잠금 해제
Go의 새로운 제네릭 기능에서 유형 공용체 제약 조건을 사용하면 여러 유형을 바인딩할 수 있습니다. 단일 일반 유형 매개변수. 그러나 질문이 생깁니다. 이러한 유형에서 공유 메서드를 어떻게 활용할 수 있습니까?
초기 시도 및 컴파일러 오류
<br>type AB 인터페이스 { </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
}
func(a *A) some() bool {
return true
}
func (b *B) some() bool {
return false
}
func some[T AB](x T) bool {
return x.some() // undefined
}
위의 코드는 some 함수에서 공유 some 메소드를 사용하려고 시도하지만 컴파일러가 어느 메소드를 결정할 수 없기 때문에 오류가 발생합니다. 호출할 메서드.
인터페이스를 사용한 해결 방법 제약 조건
이 제한을 극복하기 위해 공유 메서드를 인터페이스 제약 조건에 직접 추가할 수 있습니다.
<br>유형 AB 인터페이스 {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B some() bool
}
func some[T AB](x T) bool {
return x.some() // works
}
이는 일반 유형 T가 some 메소드를 포함하는 인터페이스 제약 조건을 충족해야 함을 보장합니다.
Go 1.18의 한계
다음 사항에 유의하는 것이 중요합니다. 이 해결 방법은 Go 1.18의 제한으로 인한 임시 조치입니다. Go 사양에서는 유형 공용체에서 공유 메서드를 사용할 수 있도록 허용하지만 현재 컴파일러 구현에서는 이를 제약 조건 인터페이스에 명시적으로 선언된 메서드로 제한합니다.
Go 1.19의 해결 방법
Go 1.18 릴리스 노트에서는 이러한 제한 사항을 인정하고 Go 1.19에서 이를 제거하여 유형 통합의 공유 메서드에 직접 액세스할 수 있도록 할 계획을 명시했습니다. 이번 개선으로 Go 제네릭의 표현력과 유연성이 향상될 것입니다.
위 내용은 Go Generics의 Type Union 제약 조건과 함께 공유 메서드를 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!