Golangで可変引数の関数にスライスを展開して渡す

Golangでは、関数の可変引数に対し、スライス展開して渡すことができるようだ。
例えば、以下のような感じ。

●test.go

package main
import "fmt"
func main() {
// 普通に指定して渡す
fmt.Println("普通に指定して渡す")
args_test("1 String :", "Arg1")
args_test("2 Strings:", "Arg1", "Arg2")
args_test("3 Strings:", "Arg1", "Arg2", "Arg3")
fmt.Printf("\n")
// スライスを変数に代入して渡す
fmt.Println("スライスを渡す")
sliceArgs := []string{"SliceArg1", "SliceArg2"}
args_test("Slice var :", sliceArgs...)
// 変数なしでも行けるらしい
args_test("Slice not var :", []string{"SliceArg1", "SliceArg2", "SliceArg3"}...)
}
func args_test(prefix string, pArg ...string) {
fmt.Printf("%s", prefix)
for _, arg := range pArg {
fmt.Printf(" %s", arg)
}
fmt.Printf("\n")
}
Sponsored Links

blacknon@BS-PUB-DEVELOP ~> cat test1.go
package main
import "fmt"
func main() {
// 普通に指定して渡す
fmt.Println("普通に指定して渡す")
args_test("1 String :", "Arg1")
args_test("2 Strings:", "Arg1", "Arg2")
args_test("3 Strings:", "Arg1", "Arg2", "Arg3")
fmt.Printf("\n")
// スライスを変数に代入して渡す
fmt.Println("スライスを渡す")
sliceArgs := []string{"SliceArg1", "SliceArg2"}
args_test("Slice var :", sliceArgs...)
// 変数なしでも行けるらしい
args_test("Slice not var :", []string{"SliceArg1", "SliceArg2", "SliceArg3"}...)
}
func args_test(prefix string, pArg ...string) {
fmt.Printf("%s", prefix)
for _, arg := range pArg {
fmt.Printf(" %s", arg)
}
fmt.Printf("\n")
}
blacknon@BS-PUB-DEVELOP ~> go run test1.go
普通に指定して渡す
1 String : Arg1
2 Strings: Arg1 Arg2
3 Strings: Arg1 Arg2 Arg3
スライスを渡す
Slice var : SliceArg1 SliceArg2
Slice not var : SliceArg1 SliceArg2 SliceArg3

 

なお、当たり前っちゃ当たり前なのかもしれないが、可変引数は引数の最後でしか指定できない。

 

【参考】

  • http://qiita.com/hnakamur/items/c3560a4b780487ef6065

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*