В пакете os
у вас есть фрагмент строки, который содержит все аргументы, передаваемые оболочкой вашей программе.
os.Args
0-е значение, т. Е. Первый элемент будет именем самой команды.
Если ваша команда инструмента mytool
, os.Args[0]
содержит mytool
.
Остальные будут аргументами, которые передаются оболочкой.
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()
}