ホームページ >バックエンド開発 >Golang >インターフェイスを使用して Go2 ジェネリックで再帰的な型制約を定義するにはどうすればよいですか?

インターフェイスを使用して Go2 ジェネリックで再帰的な型制約を定義するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-14 13:04:12366ブラウズ

How Can I Define Recursive Type Constraints in Go2 Generics Using Interfaces?

定義済みインターフェイスを使用した再帰型制約の定義

Go2 ジェネリックスでは、インターフェイスを使用してジェネリック型の型制約を指定できます。ただし、現在のドラフトでは、ジェネリック型自体の引数を使用してメソッドの実装を強制する方法は提供されていません。

この制限を克服するには、次のアプローチを検討してください。

再帰インターフェイスの定義:

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

ジェネリック型パラメーターを使用した関数の定義再帰インターフェイスによる制約:

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

使用法:

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
}

説明:

型制約 T Lesser[T] は、ジェネリック型 T が型 T の引数を持つ Less メソッド。これにより、再帰的な型制約が可能になります。

このアプローチにより、独自の Less メソッドを実装する Apple や Orange のようなカスタム型を定義できるようになり、再帰的な制約が満たされ、これらのカスタム型を使用した IsLess 関数。

以上がインターフェイスを使用して Go2 ジェネリックで再帰的な型制約を定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。