Golang にて func(v …t) をラップしたい。可変引数が定義されている関数をラップするサンプル

例えば下記のような関数が用意されているとする。

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
}

関連投稿

カテゴリー:Go