スライスの展開
スライスargsがあるときargs...
で展開することが出来る。
func A(args ...string) {}
func main() {
args := []string{"a", "b"}
A(args...)
}
しかし以下のように引数が...interface{}
となっている場合はコンパイルに失敗してしまう。
func A(args ...interface{}) {}
func main() {
args := []string{"a", "b"}
A(args...)
}
// => cannot use args (type []string) as type []interface {} in argument to A
…interface{}への展開
FAQによると[]T
から[]interface{}
にはキャスト出来ないので、明示的にスライスを用意すれば良いと書いてある。
func A(args ...interface{}) {}
func main() {
args := []string{"A", "B"}
is := make([]interface{}, 0, len(args))
for _, a := range args {
is = append(is, a)
}
A(is...)
}