Jak přidat text s uvozovek a lomítka v golang

0

Otázka

Podělím se o příklad

Chci řádek níže v golang string curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

kód jsem napsal:

cmd := "curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://" + ip_string + "/restconf/data/ -v"

err: neočekávaný řetězec na konci Řádku.

go
2021-11-23 16:07:26
1

Nejlepší odpověď

1

neočekávaný řetězec na konci Řádku.

Můžete použít fmt.Sprintf formátovat řetězec, takže nemusíte stitch je dohromady ručně. Připadá mi to jednodušší číst a psát, sám:

fmt.Sprintf("curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://%s/restconf/data/ -v", ip_string)

Vypadá to, že jste se snaží vytvořit shellový příkaz pro vyvolání Curl. Lepší, než se snaží uniknout své curl argumenty pro shell, je vyvolat curl přímo. Tímto způsobem můžete použít Jít do samostatné argumenty, aniž by se museli starat o shell cituji:

cmd := exec.Command("curl", 
   "-u", "admin:admin",
   "-H", "Accept: application/yang-data+json",  
   "-s", 
   fmt.Sprintf("http://%s/restconf/data/", ip_string), 
   "-v",
)

Nicméně, pokud bych byl tebou, tak bych použití https://pkg.go.dev/net/http podat žádost a zamezují os/exec úplně. Výkon a účinnost bude lepší, a manipulace odpověď a případné chybové stavy bude cesta jednodušší, než dělat to přes curl a snaží se analyzovat výstup a zpracovávat chybové kódy.

req, err := http.NewRequest("GET", fmt.Sprintf("http://%s", source_ip), nil)
// handle err
req.Header.Add("Accept", "application/yang-data+json")
req.SetBasicAuth("admin","admin")
resp, err := client.Do(req)
// handle err!
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
// handle err!
2021-11-23 16:26:50

Díky za odpověď. Ale to, co o vlajky -u-s a -v, jak se patří, že
Pulkit Kundra

{"error":"zpracovat \"-s http://<ip>/restconf/data/ -v\": první cesta segmentu v URL nesmí obsahovat dvojtečku","handler":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: Nepodařilo se vytvořit požadavek: analyzovat \"-s http://<ip>/restconf/data/ -v\": první cesta segmentu v URL nesmí obsahovat dvojtečku","time":"2021-11-24T05:13:21Z"} {"handler":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Nepodařilo se získat data z oboru Názvů: <ip>","čas":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Mám výše uvedené chyby při použití pkg.jít.dev/net/http
Pulkit Kundra

Pokud chcete jít s net/http přístup a jsou stále chybu, nejlepší je vložit jako novou otázku. Zdá se mi, že mají -s, url, a -v všichni ve stejné lajně.
Daniel Farrell

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................