Cum de a adăuga string cu ghilimele și oblice în golang

0

Problema

Am să vă împărtășesc un exemplu

Vreau linia de mai jos în golang string curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

codul l-am scris:

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

err: neașteptat șir la sfârșitul de Linie.

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

Cel mai bun răspuns

1

neașteptat șir la sfârșitul de Linie.

Puteți utiliza fmt.Sprintf a format un șir de caractere, astfel încât să nu trebuie să cusatura împreună de mână. Am găsi acest lucru mai ușor să scrie și să citească, eu:

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

Se pare ca esti încercarea de a crea o coajă de comandă pentru a invoca Curl. Mai bine decât încercarea de a scăpa de curl argumente pentru shell, este de a invoca curl direct. În acest fel puteți utiliza Du-te pentru a separa argumentele fără a fi nevoie să vă faceți griji despre shell referire la:

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

Cu toate acestea, dacă aș fi fost tu, aș folosi https://pkg.go.dev/net/http pentru a face o cerere și de a evita os/exec în întregime. Performanța și eficiența va fi mai bine, și de manipulare răspuns și orice condiții de eroare va fi drumul mai ușor decât a face asta prin curl și încercarea de a analiza ieșire și să se ocupe de coduri de eroare.

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

Multumesc pentru raspuns. Dar ceea ce despre steaguri-u -s -v cum să includ asta
Pulkit Kundra

{"eroare":"analiza \"-s http://<ip>/restconf/date/ -v\": primul segment de cale în URL-ul nu poate conține colon","handler":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: nu a Reușit să creeze cerere: analiza \"-s http://<ip>/restconf/date/ -v\": primul segment de cale în URL-ul nu poate conține colon","timpul":"2021-11-24T05:13:21Z"} {"handler":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"nu a Reușit pentru a obține date de Nume: <ip>","timpul":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Am eroarea de mai sus în timp ce utilizați pkg.du-te.dev/net/http
Pulkit Kundra

Dacă vrei să mergi cu net/http abordare și vă sunt obtinerea o eroare, cel mai bine pentru a lipi ca o nouă întrebare. Mi se pare că au -s, url-ul, și -v tot în același șir acolo.
Daniel Farrell

În alte limbi

Această pagină este în alte limbi

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