37
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Go]「...(ピリオド3つ)」の使い方(基本編)

Last updated at Posted at 2020-10-11

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

Go Playgroud

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)
	}
}

Go Playgroud

私が業務で一番よくつかうのは、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

37
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?