ホームページ > バックエンド開発 > Golang > Go のジェネリックスは異なる数値型のスライスをどのように処理できますか?

Go のジェネリックスは異なる数値型のスライスをどのように処理できますか?

DDD
リリース: 2024-12-25 02:12:16
オリジナル
395 人が閲覧しました

How Can Generics in Go Handle Slices of Different Numeric Types?

Go で異なる型のスライスでジェネリックスを使用する

Go でのジェネリックスの考慮には、インターフェイスのコア タイプの概念が含まれます。 NumberSlice などのインターフェイス制約には、複数の基礎となる型 ([]int64 や []float64 など) が含まれるため、コアの型がありません。これは、ジェネリック関数内でスライスを反復処理しようとするときに障害となります。

この問題を解決するには、基本型を必須にするようにインターフェイスを変更し、スライス タイプが関数シグネチャ内で決定されるようにすることが 1 つの方法です。 :

type Number interface {
    int64 | float64
}

func add[N Number](n []N) {
    for _, v := range n {
        fmt.Println(v)
    }
}
ログイン後にコピー

ただし、さらに徹底した冗長な解決策には、インターフェイス内でコア タイプを明示的に宣言する必要があります。 constraint:

type NumberSlice[N int64 | float64] interface {
    ~[]N
}

func add[S NumberSlice[N], N int64 | float64](n S) {
    for _, v := range n {
        fmt.Println(v)
    }
}
ログイン後にコピー

このアプローチにより、インターフェイスが特定の基礎となる型 ([]N) を持ち、関数が int64 または float64 のいずれかのスライスを受け入れて処理できることが保証されます。

以上がGo のジェネリックスは異なる数値型のスライスをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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