Go 1.18で導入されたGo
Comparable
この
package main import ( "fmt" ) type Comparable interface { Less(other interface{}) bool } func Max[T Comparable](slice []T) T { if len(slice) == 0 { var zero T return zero // Handle empty slice } max := slice[0] for _, v := range slice { if v.Less(max) { max = v } } return max } type Int int func (i Int) Less(other interface{}) bool { return i < other.(Int) } type String string func (s String) Less(other interface{}) bool { return s < other.(String) } func main() { intSlice := []Int{1, 5, 2, 8, 3} stringSlice := []String{"banana", "apple", "orange"} maxInt := Max(intSlice) maxString := Max(stringSlice) fmt.Println("Max int:", maxInt) // Output: Max int: 8 fmt.Println("Max string:", maxString) // Output: Max string: orange }
を使用します。 インターフェイス内のMax
メソッドにより、関数は特定のタイプに関係なく要素を比較できます。 これは、ジェネリックがインターフェイスとシームレスに統合され、タイプセーフと再利用可能なコードを提供する方法を示しています。 ジェネリックは、インターフェイスを操作するときにコードの再利用性を大幅に向上させます。ジェネリックの前に、さまざまなタイプのほぼ同一の関数を書くことがよくあります。これにより、コードの重複とメンテナンスの負担が増加しました。T
Comparable
genericsを使用すると、特定のインターフェイスの制約を満たす任意のタイプで動作する単一の関数またはタイプを書きます。 これにより、冗長性が劇的に減少します。 上記の例は、これを完全に紹介しています。1つのLess
関数は、Comparable
、
などの機能の必要性を排除します。 この再利用性の向上は、よりクリーンでメンテナンスしやすく、エラーが発生しやすいコードベースの低下につながります。
以上がGOでインターフェイスを備えたジェネリックを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。