1.はじめに
これからGoを始める人のためになればと思って記事を書きました。
ソースコードで「...」を初めて見たときに、ググっても日本語で情報がまとまっているものがあまり無いので、私が業務でよく使っている「...」の使い方をまとめようとおもいました。
1-1.この記事を読んだらどうなるのか
「...」の使い方とポイントを理解できる
1-2.対象読者
Goの「...」がわからない人
2.「...」の使い方(基本編)
2-1.関数の引数を可変長にしたいとき
関数の引数を可変長にすることができます。
たとえば、関数で複数のintを可変で受け取りたいときがあるとしたら、以下のように書くことができます。
ポイントは ...int のように型の前に...を書くことです。
関数内でも可変長引数はSliceとして扱われます。
気をつけたいのは、関数を呼び出すとき可変長引数に値を渡さないと、可変長引数はnilとして扱われます。(もちろんコンパイル通ります)
// WriteInt はintを可変で受け取って出力する関数
func WriteInt(nums ...int) {
for _, v := range nums {
fmt.Println(v)
}
}
実行すると、以下の結果になります
func main() {
WriteInt(1, 2, 3)
}
// 実行結果
1
2
3
2-2.可変長引数の関数に値を全て渡す
前の章で説明した可変長引数の関数に対して、「...」を使うことで一気に渡すことができます。
ポイントは s... のように渡したい値の後に...を書くことです。
func main() {
s := []int{1, 2, 3}
// sが持つ値を...を使って、全てWriteIntに渡している
WriteInt(s...)
}
func WriteInt(nums ...int) {
for _, v := range nums {
fmt.Println(v)
}
}
私が業務で一番よくつかうのは、Sliceをappendするときです。
func main() {
s1 := []int{1, 2, 3}
s2 := []int{4, 5, 6}
s3 := append(s1, s2...)
fmt.Println(s3)
}
// 実行結果
[1 2 3 4 5 6]
まとめ
これらの例を通して、可変長引数 ... の強力な用途とその応用方法を紹介しました。Go言語におけるこの機能は、コードの柔軟性と再利用性を大いに高めることができます。ぜひあなたのコードで活用してみてください!
応用編の記事も書いたのでよかったらご参考にしてください。
参考
公式ドキュメント Passing_arguments_to_..._parameters
公式ドキュメント append
3 dots in 4 places
Goで可変引数の関数にスライスを展開して渡す
★ Ultimate Guide to Go Variadic Functions