登录
首页 >  Golang >  Go问答

使用Go执行类似curl命令

来源:stackoverflow

时间:2024-03-20 11:27:37 216浏览 收藏

使用 Go 语言执行类似 curl 命令时,可通过 os.Args 获取 shell 传递给程序的参数。os.Args[0] 包含命令本身的名称,后续元素则为参数。此方法适用于需要传递占位符或从外部获取 URL 等场景。

问题内容

我正在使用 go 和命令来执行 curl ,它按预期工作

curl := exec.command("curl", "https://services.odata.org/v3/northwind/northwind.svc/")
    out, err := curl.output()
    if err != nil {
        fmt.println("erorr" , err)
        return
    }
    fmt.println(out)

现在我想使用一些占位符,例如

curl -o http://quiet-waters-1228.herokuapp.com/assets/image.jpg

但现在我需要获取命令的 url 例如如果我在 bash mytool url 中运行,我得到了 url 值

`curl -o $(mytool url)`

问题是我们需要执行代码中的命令,但我不知道如何传递它

curl := exec.Command("curl", "curl -O $(url)")
        out, err := curl.Output()
        if err != nil {
            fmt.Println("erorr" , err)
            return
        }
        fmt.Println(out)

解决方案


os 包中,您有一段字符串,其中包含 shell 传递给程序的所有参数。

os.args 第 0 个值,即第一个元素将是命令本身的名称。

如果您的工具命令是 mytool,则 os.args[0] 包含 mytool

其余部分将是由 shell 传递的参数。

package main

import (
    "log"
    "os"
    "os/exec"
)

func main() {

    if len(os.args) < 2 {
        // if argument is not provided quit
        log.fatalln("url not provided")
    }
    url := os.args[1] // url

    cmd := exec.command("curl", "-o", url)
    cmd.run()
}

您还可以同时下载多个 url,

var wg *sync.WaitGroup

func main() {
    urls := os.Args[1:]

    wg = new(sync.WaitGroup)
    wg.Add(len(urls))

    for _, url := range urls {
        go download(url)
    }

    wg.Wait()
}

func download(url string) {
    defer wg.Done()
    cmd := exec.Command("curl", "-O", url)
    cmd.Run()
}

好了,本文到此结束,带大家了解了《使用Go执行类似curl命令》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>