如何将切片解压缩为部分函数参数?

我正在使用exec.Command它为其第二个参数接收可变数量的字符串。例如:


out, err = exec.Command("python3", "script_name.py", "argument", "--flag", "--another")

我也可以使用切片并使用以下方法解包...:


var args = []string{"script_name.py", "argument", "--flag", "--another"}

out, err = exec.Command("python3", args...)

但是将两者混合不起作用:


var args = []string{"argument", "--flag", "--another"}

out, err = exec.Command("python3", "script_name.py", args...)

失败:


./tester.go:12:29: too many arguments in call to exec.Command

        have (string, string, []string...)

        want (string, ...string)

这让我感到惊讶,因为类似的东西可以在 python 中工作。我试过寻找这个特定的案例,但我发现的大部分资源都只是一般的切片。我已经通过将“常量”部分添加到切片的开头来“解决”它(更像是一种解决方法),但想确保我没有遗漏任何东西:


var args = os.Args

args = append([]string{"script_name.py"}, args...)

out, err := exec.Command("python3", args...).Output()

我错过了什么吗?有没有办法同时传递常量字符串和解压数组?

这里的语言限制是什么?为什么要区分string, string, string和string, string...?我很想更深入地理解这一点。


江户川乱折腾
浏览 152回答 1
1回答

宝慕林4294392

不。约束在规范中有详细说明:如果最后一个参数可分配给切片类型 []T 并且后跟 ...,则它将作为 ...T 参数的值原封不动地传递。如您所见,这是您可以将切片分解为可变参数的唯一情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go