为了不重复我的一遍又一遍,我想创建一个处理运行某些命令的函数。
func runCommand(name string, arg ...string) error {
cmd := exec.Command(name, arg)
if err := cmd.Run(); err != nil {
return err
} else {
return nil
}
}
尝试运行此操作后,我收到以下错误:
cannot use arg (type []string) as type string in argument to exec.Command
我查看了os.Command
的实现,看起来函数签名与我提供的完全一致。
在内部,[]string
应与variadic参数相同,但对于编译器,它似乎不是。
有没有办法将variadic参数传递给Command
?
答案 0 :(得分:13)
您使用其他[]string
...
cmd := exec.Command(name, arg...)
language spec上的Passing arguments to ... parameters
如果最终参数可分配给切片类型
[]T
,则可能是 如果参数是...T
参数的值,则传递不变 然后是...
。在这种情况下,不会创建新切片。给出切片s并调用
在问候语中,s := []string{"James", "Jasmine"} Greeting("goodbye:", s...)
who
与具有相同基础数组的s
具有相同的值。