在Go中,可以使用...表示法在函数中为最终参数添加前缀,以表明它是一个可变参数。
template.ParseFiles就是这样一个函数:
func (t *Template) ParseFiles(filenames ...string) (*Template, error)
我正在尝试创建一个自己的函数,它设置了我的模板的各种常见功能,我希望调用函数传入需要解析的文件列表但是我是不确定如何。
例如,如果我的代码看起来像这样:
type templateMap map[string]*template.Template
func (tmpl templateMap) AddTemplate(name string, files ...string) {
tmpl[name] = template.Must(template.ParseFiles(files)).Delims("{@","@}")
}
我收到错误:
cannot use files (type []string) as type string in function argument
如何包装可变参数?
答案 0 :(得分:5)
要传递切片代替函数的可变参数,只需将其加上...
后缀即可。因此,在您的示例代码中,您需要:
tmpl[name] = template.Must(template.ParseFiles(files...)).Delims("{@","@}")
以下是该概念的一个简单示例:http://play.golang.org/p/TpYNxnAM_5