Go では、ジェネリック関数は、型アサーション、型エイリアス、または空のインターフェイスを使用して非ジェネリック コードと対話できます。型アサーションを使用すると、値を特定の型に変換できます。型エイリアスは既存の型の汎用エイリアスを作成し、空のインターフェイスは任意の型の変数を表すことができます。これらのメソッドを通じて、ジェネリック関数は非ジェネリック型の値を受け入れたり返したりできるため、さまざまな型にわたるデータ処理が可能になります。
Go でジェネリック関数を非ジェネリック関数と対話させる方法
Go ジェネリックは Go 1.18 から導入されました。型とアルゴリズム コードを再利用するための扉。しかし、新しい汎用コードは既存の非汎用コードとどのように相互作用するのでしょうか?
型アサーションの使用
型アサーションは、インターフェイスを特定の型の値に変換する方法を提供します。これは、switch ステートメントを使用して実行できます。
func AnyToString(any interface{}) string { switch myString := any.(type) { case string: return myString default: return "Unknown" } }
この関数は、任意の値を文字列に変換しようとし、文字列でない場合は「Unknown」を返します。
型エイリアスの使用
型エイリアスを使用すると、既存の型のエイリアスを作成できます。これにより、非ジェネリック型のジェネリック エイリアスを作成できるようになります:
type MyString string func GenericFunc[T MyString](t T) {}
これで、ジェネリック関数 GenericFunc
で非ジェネリック型 MyString
を使用できるようになります。 :
GenericFunc(MyString("Hello"))
空のインターフェイスを使用する
空のインターフェイスは、任意のタイプの変数を表すことができます。これにより、任意のタイプの値を受け入れる、または返す汎用関数を作成できます:
func GenericEmptyInterfaceFunc(empty interface{}) {}
この関数は、任意のタイプの値で呼び出すことができます:
GenericEmptyInterfaceFunc(10) GenericEmptyInterfaceFunc("Hello")
実用的な例: ジェネリック ソートの実装
リストを並べ替えることによって、ジェネリック コードと非ジェネリック コードの相互作用を示してみましょう。
// Sort is a generic function that sorts a slice of any type that implements sort.Interface. func Sort[T sort.Interface](s []T) { sort.Sort(s) } // IntSlice implements sort.Interface for a slice of int. type IntSlice []int func (s IntSlice) Len() int { return len(s) } func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] } func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // StringSlice implements sort.Interface for a slice of string. type StringSlice []string func (s StringSlice) Len() int { return len(s) } func (s StringSlice) Less(i, j int) bool { return s[i] < s[j] } func (s StringSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func main() { intSlice := IntSlice{10, 5, 7, 3, 11} Sort(intSlice) fmt.Println(intSlice) // Output: [3 5 7 10 11] stringSlice := StringSlice{"Hello", "World", "Go", "Golang"} Sort(stringSlice) fmt.Println(stringSlice) // Output: [Go Golang Hello World] }
このコードは、汎用関数 Sort
を使用して、カスタム タイプに基づいてさまざまな値のリストを並べ替える方法を示します。
以上がジェネリック関数は Golang の既存の非ジェネリック関数とどのように対話しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。