Jak dodać wiersz z cytatami i ukośniki w golang

0

Pytanie

Podzielę się przykładem

Potrzebuję wiersz poniżej w wierszu golang curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

kod, który napisałem:

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

się mylić: nieoczekiwany ciąg znaków na końcu wiersza.

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

Najlepsza odpowiedź

1

nieoczekiwany ciąg znaków na końcu wiersza.

Można użyć fmt.Sprintf aby sformatować ciąg tak, aby nie trzeba było zszywać ręcznie. Mi samemu to łatwiej czytać i pisać:

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

Wygląda na to, próbujesz stworzyć polecenie powłoki, do połączeń Curl. Lepiej, niż próbować uciec od twojego curl argumenty dla powłoki, polega na wywołaniu curl bezpośrednio. W ten sposób, można użyć Go do podziału argumentów, nie martwiąc się o cytowaniu powłoki:

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

Jednak, gdybym był na twoim miejscu, ja bym użył https://pkg.go.dev/net/http aby złożyć wniosek i wyeliminować os/exec w pełni. Wydajność i efektywność będzie wyższa, a przetwarzanie odpowiedzi i w każdych warunkach błędów będzie o wiele łatwiejsze, niż wykonanie tego za pomocą curl i próbuje analizować dane wyjściowe i przetwarzać kody błędów.

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

Dziękuję za odpowiedź. Ale jak co do flag-us i-v, jak to włączyć
Pulkit Kundra

{"błąd":"przetwarzanie \"-ze strony internetowej http://<ip>/restconf// dane-w\". pierwszy sposób segment w adresie URL nie może zawierać dwukropek","trener","post /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: nie udało się utworzyć wniosek: rozebrać \"-ze strony internetowej http://<ip>/restconf// dane-w\". pierwszy sposób segment w adresie URL nie może zawierać dwukropek","czas":"2021-11-24T05:13:21Z"} {"obsługi":"słup /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"nie udało się uzyskać dane z przestrzeni nazw: <ip>","czas":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Uzyskane powyższe błąd podczas korzystania z pkg.go.dev/net/http
Pulkit Kundra

Jeśli chcesz iść z net/http podejdź, a otrzymasz błąd, najlepiej wstawić ją jako nowego wydania. Wydaje mi się, że -sAdres URL i -v wszystko w jednej linii tam.
Daniel Farrell

W innych językach

Ta strona jest w innych językach

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