我正在尝试使用戈兰在浏览器上打开给定的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 关注
- 73 浏览
添加回答
举报
0/150
提交
取消