我正在嘗試使用戈蘭在瀏覽器上打開給定的URL。當我使用此代碼時,它按預期工作并在瀏覽器中打開給定的URL:func main() { url := "https://google.com" fmt.Printf(url) cmd := exec.Command("open", url) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err := cmd.Run() if err != nil { fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) }}輸出(打開瀏覽器):~/workspace/go/so ? go run main.gohttps://google.com%但是當我使用 的輸出作為第二個調用的參數時,程序返回如下錯誤:exec.Command("echo", "https://google.com")exec.Commandfunc main() { output, err := exec.Command("echo", "https://google.com").Output() if err != nil { fmt.Println(err) } url := string(output) fmt.Printf(url) cmd := exec.Command("open", url) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err = cmd.Run() if err != nil { fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) }}輸出(錯誤中有當前目錄路徑作為 URL 后面的路徑):~/workspace/go/so ? go run main.gohttps://google.comexit status 1: The file /Users/kadir/workspace/go/so/https:/google.com does not exist.我在第二個代碼塊中做錯了什么?我的go版本是1.17,文件是這樣的:go.modmodule sogo 1.17require github.com/urfave/cli/v2 v2.3.0require ( github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect)
1 回答

心有法竹
TA貢獻1866條經驗 獲得超5個贊
如前所述@JimB在命令輸出的末尾有一個隱式換行符。
最好使用謂詞來確保輸出中沒有惡意字符:fmt
%q
fmt.Printf("%q\n", url) // "https://google.com\n"
因此,在源位置修復此問題,使用 來抑制換行符:echo -n
output, err := exec.Command("echo", "-n", "https://google.com").Output()
或在接收端:
url = strings.TrimSpace(url)
- 1 回答
- 0 關注
- 97 瀏覽
添加回答
舉報
0/150
提交
取消