モジュール 3 · レッスン 3 / 5コース内の 13/50~10 min
モジュールのレッスン (3/5)
可変個引数関数
可変引数関数は、任意の数の引数を受け入れます。
同じタイプです。最後の型の前に ... を入れて宣言します。
パラメータ。関数内のパラメータは スライス です。
宣言
Go
func sum(nums ...int) int {
tot := 0
for _, n := range nums {
tot += n
}
return tot
}
sum() // 0 (nums = []int{})
sum(1) // 1
sum(1, 2, 3, 4) // 10last パラメータのみが可変個数にできます。
Go
func log(prefix string, values ...any) { ... } // ok
// func wrong(...int, suffix string) {} // ERROREスライスを広げる
すでにスライスがある場合は、次のようにして可変引数関数に渡すことができます。
...:
Go
nums := []int{1, 2, 3}
sum(nums...) // 6 — espande lo slice nei singoli argomenti「...」はスライスの後にあります。スプレッドがなければ、タイプが得られます
エラー: 関数がシーケンスを予期している場合、[]int を渡すことになります。
int の。
nums は新しいコンテナではなくスライスです
関数 nums の内部には []int 型があります。すべての標準スライス
動作する操作: len(nums)、nums[0]、range など。
古典的な使用例: fmt.Println
fmt の Print* 関数はすべて可変長です。
Go
// signature (semplificata):
// func Println(a ...any) (n int, err error)
fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)試してみてください
運動#go.m3.l3.e1
試行回数: 0読み込み中…
すべての引数の合計を返す sum(nums ...int) int を定義します。
エディターを読み込み中…
ヒントを表示
関数 `nums` 内には型 `[]int` があります。
3 回の試行後に解決策が利用可能になります
運動#go.m3.l3.e2
試行回数: 0読み込み中…
スプレッド `nums...` を使用してスライス nums を渡して、既存の sum 関数を呼び出します。
エディターを読み込み中…
ヒントを表示
「...」はスライス名の後に続きます。
3 回の試行後に解決策が利用可能になります
Quiz#go.m3.l3.e3
準備完了`func f(args ...string)` 内の `args` の型は何ですか?
Go
func f(args ...string) {
_ = args
}要約
...Tを最後のパラメータとして = 可変個引数関数;内部には[]Tがあります。- 単一の値で呼び出される: コンパイラはそれらをスライスに収集します。
- 既存のスライスを使用して呼び出されます:
slice...(拡散、スライスを再利用)。 - すべての
fmt.Print*関数は可変長引数です。 - 最後のパラメータのみ可変個引数にできます。