我正在使用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...?我很想更深入地了解這一點。
uj5u.com熱心網友回復:
不。
規范中詳細說明了約束條件:
如果最后一個引數可分配給切片型別 []T 并且后跟 ...,則將其作為 ...T 引數的值原樣傳遞。
正如您所發現的,這是您可以將切片分解為可變引數的唯一情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338470.html
標籤:走
