例えば下記のような関数が用意されているとする。
func (s *DB) Find(out interface{}, where ...interface{}) *DB
where が可変になっている。
これは下記のように呼び出せる。
DB.Find(&Users)
DB.Find(&Users, Users{ ID: 1 })
上記の関数を他の関数の中で呼び出したい。
引数が可変になっている関数をラップしたい時は下記のように書く。
ドット3つを可変引数の右に記述する。
func (s *Sample) Find(out interface{}, where ...interface{}) *DB {
// 「where」ではなく「where...」になる
return DB.Find(out, where...)
}
ちゃんと書いたサンプル
import "fmt"
func sampleWrap(s string, strs ...string) {
sample(s, strs...)
}
func sample(s string, strs ...string) {
fmt.Printf(s)
for _, str := range strs {
fmt.Printf(str)
}
}
func main() {
sampleWrap("test1")// test1
sampleWrap("test2", "a")// test2 a
sampleWrap("test3", "a", "b", "c")// test3 abc
}