将[]字符串传递给需要可变参数的函数

时间:2015-09-22 15:34:31

标签: go

为了不重复我的一遍又一遍,我想创建一个处理运行某些命令的函数。

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

1 个答案:

答案 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具有相同的值。