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

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

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


参考