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

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

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*