ホームページ  >  記事  >  バックエンド開発  >  ジェネリック関数は Golang の既存の非ジェネリック関数とどのように対話しますか?

ジェネリック関数は Golang の既存の非ジェネリック関数とどのように対話しますか?

PHPz
PHPzオリジナル
2024-04-16 17:36:01610ブラウズ

Go では、ジェネリック関数は、型アサーション、型エイリアス、または空のインターフェイスを使用して非ジェネリック コードと対話できます。型アサーションを使用すると、値を特定の型に変換できます。型エイリアスは既存の型の汎用エイリアスを作成し、空のインターフェイスは任意の型の変数を表すことができます。これらのメソッドを通じて、ジェネリック関数は非ジェネリック型の値を受け入れたり返したりできるため、さまざまな型にわたるデータ処理が可能になります。

ジェネリック関数は Golang の既存の非ジェネリック関数とどのように対話しますか?

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 サイトの他の関連記事を参照してください。

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