ホームページ > バックエンド開発 > Golang > Go の空のインターフェイスまたは Go 1.18 ジェネリックはジェネリック関数の真の実装ですか?

Go の空のインターフェイスまたは Go 1.18 ジェネリックはジェネリック関数の真の実装ですか?

Patricia Arquette
リリース: 2024-12-29 04:36:10
オリジナル
313 人が閲覧しました

Are Go's Empty Interfaces or Go 1.18 Generics the True Implementation of Generic Functions?

Go の汎用関数: 総合ガイド

Go を探索していると、空のインターフェイスの概念に遭遇するかもしれません。これは、追加のメソッドを必要とせず、あらゆる型を保持できる強力なツールです。

次の例を考えてみましょう:

func describe(i interface{}) {
    fmt.Printf("Type: %T | Value: %v\n", i, i)
}
ログイン後にコピー

説明するためにさまざまな型を渡すと、型と値が出力されます。

"Type: int | Value: 5" // for i := 5
"Type: string | Value: test" // for i := "test"
ログイン後にコピー

では、これは Go の汎用関数の実装方法なのでしょうか?完全ではありません。 Go 1.18 以降では、真のジェネリック関数を作成できるようになりました。以下に例を示します。

package main

import (
    "fmt"
)

// T can be any type
func Print[T any](s []T) {
    for _, v := range s {
        fmt.Print(v)
    }
}

func main() {
    // Passing list of string works
    Print([]string{"Hello, ", "world\n"})

    // You can pass a list of int to the same function as well
    Print([]int{1, 2})
}
ログイン後にコピー

出力:

Hello, world
12
ログイン後にコピー

この汎用関数 Print は、あらゆるタイプのスライスを処理でき、汎用性が高く、タイプセーフな汎用プログラミング アプローチを提供します。

以上がGo の空のインターフェイスまたは Go 1.18 ジェネリックはジェネリック関数の真の実装ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート