Golangでは、関数の可変引数に対し、スライス展開して渡すことができるようだ。 例えば、以下のような感じ。
test.gopackage 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 ~> 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
なお、当たり前っちゃ当たり前なのかもしれないが、可変引数は引数の最後でしか指定できない。