如何使用可变参数包装函数

时间:2014-06-19 00:46:06

标签: go

在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

如何包装可变参数?

1 个答案:

答案 0 :(得分:5)

要传递切片代替函数的可变参数,只需将其加上...后缀即可。因此,在您的示例代码中,您需要:

tmpl[name] = template.Must(template.ParseFiles(files...)).Delims("{@","@}")

以下是该概念的一个简单示例:http://play.golang.org/p/TpYNxnAM_5