>백엔드 개발 >Golang >인터페이스를 사용하여 Go Generics에서 재귀 유형 제약 조건을 어떻게 달성할 수 있습니까?

인터페이스를 사용하여 Go Generics에서 재귀 유형 제약 조건을 어떻게 달성할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 15:22:10112검색

How Can Recursive Type Constraints Be Achieved in Go Generics Using Interfaces?

미리 정의된 유형이 있는 재귀 유형 제약 조건

Go 제네릭에서는 인터페이스를 사용하여 제네릭 유형에 유형 제약 조건을 지정하는 것이 가능합니다. 그러나 제네릭 유형의 인수를 사용하여 메소드 구현을 강제하는 것은 어려울 수 있습니다.

Go 제네릭에서 재귀 유형 제약 조건을 달성하기 위해 제네릭 유형을 다음과 같이 사용하는 메소드로 인터페이스를 정의할 수 있습니다. 인수:

type Lesser[T any] interface {
    Less(T) bool
}

그런 다음 Lesser[T] 유형의 두 인수를 사용하여 다음을 반환하는 함수를 만들 수 있습니다. 부울:

func IsLess[T Lesser[T]](x, y T) bool {
    return x.Less(y)
}

이제 Lesser[T] 인터페이스를 구현하는 사용자 정의 유형을 함수에서 사용할 수 있습니다.

type Apple int

func (a Apple) Less(other Apple) bool {
    return a < other
}

type Orange int

func (o Orange) Less(other Orange) bool {
    return o < other
}

func main() {
    fmt.Println(IsLess(Apple(10), Apple(20)))   // true
    fmt.Println(IsLess(Orange(30), Orange(15))) // false
}

Lesser[T] 제약 조건은 제공된 유형이 IsLess 함수에는 동일한 유형의 인수를 사용하는 Less 메서드를 구현합니다. 이는 유형 리터럴을 사용하지 않고도 재귀적인 유형 제약 조건을 허용합니다.

위 내용은 인터페이스를 사용하여 Go Generics에서 재귀 유형 제약 조건을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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