ホームページ  >  記事  >  バックエンド開発  >  Goの可変引数関数にスライスのスライスをアンパックされた引数として渡すにはどうすればよいですか?

Goの可変引数関数にスライスのスライスをアンパックされた引数として渡すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 08:20:29584ブラウズ

How to Pass a Slice of Slices as Unpacked Arguments to a Variadic Function in Go?

スライスのスライスを可変個引数としてアンパックする

問題:
スライスのスライスをアンパックされた引数として可変個引数に渡そうとするとき関数を実行するとコンパイルエラーが発生します。このエラーは、ソース スライス タイプを宛先の可変個引数パラメータ タイプに割り当てることができないことを示しています。

説明:
Go 仕様によれば、タイプ .. の可変個引数パラメータを持つ関数。 .T は、引数として []T 型の単一スライスを必要とします。ただし、スライスのスライス [][]T の場合、この条件は満たされません。

解決策:
この問題を解決するには、必須のタイプ []T を作成し、必要な値を入力する必要があります。この新しいスライスは、省略記号演算子 (...) を使用してアンパックして渡すことができます。

例:

<code class="go">package main

import (
    "fmt"
)

func unpack(args ...interface{}) {
    fmt.Println(len(args))
}

func main() {
    sliceOfSlices := [][]int{
        []int{1, 2},
        []int{101, 102},
    }

    // Create a new slice of type []interface{}
    sliceOfInterfaces := []interface{}{}
    for _, v := range sliceOfSlices {
        sliceOfInterfaces = append(sliceOfInterfaces, v)
    }

    unpack(sliceOfInterfaces...) // Pass unpacked values
}</code>

出力:

2

この例では、sliceOfSlices のアンパックされた要素を引数として unpack() 関数が呼び出されます。 len() 関数は、渡された引数の数を示すために使用されます。これは、ネストされたスライスの両方の要素がアンパックされていることを示します。

以上がGoの可変引数関数にスライスのスライスをアンパックされた引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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