Comment faire pour ajouter une chaîne avec des citations et des barres obliques dans golang

0

La question

Je vais partager un exemple

Je veux que la ligne ci-dessous dans golang chaîne curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

code que j'ai écrit:

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

err: inattendu de la chaîne à la fin de la Ligne.

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

La meilleure réponse

1

inattendu de la chaîne à la fin de la Ligne.

Vous pouvez utiliser fmt.Sprintf pour formater une chaîne de caractères de sorte que vous n'avez pas à les coudre ensemble à la main. Je trouve cela plus facile à lire et à écrire, à moi-même:

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

Semble que vous essayez de créer un shell de commande pour appeler Curl. Mieux que d'essayer de s'échapper de votre curl arguments en faveur de la coquille, est d'invoquer curl directement. De cette façon, vous pouvez utiliser Aller pour séparer les arguments sans avoir à vous soucier de la coquille de citer:

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

Cependant, si j'étais vous, je ne l'utiliserais https://pkg.go.dev/net/http pour faire la demande et d'éviter os/exec entièrement. Les performances et l'efficacité sera meilleure, et la manipulation de la réponse et les conditions d'erreur sera manière plus facile que de le faire que par le biais de curl et en essayant d'analyser de sortie et de gérer les codes d'erreur.

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

Merci pour la réponse. Mais ce que sur les drapeaux-u -s et -v comment l'inclure
Pulkit Kundra

{"error":"parse \"-s http://<ip>/restconf/data/ -v\": premier segment de chemin dans l'URL ne peut pas contenir de virgule","gestionnaire":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: impossible de créer la demande: parse \"-s http://<ip>/restconf/data/ -v\": premier segment de chemin dans l'URL ne peut pas contenir de virgule","heure":"2021-11-24T05:13:21Z"} {"gestionnaire":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"impossible d'obtenir des données à partir de l'espace de Noms: <ip>","le temps":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Ai l'erreur ci-dessus lors de l'utilisation de pkg.aller.dev/net/http
Pulkit Kundra

Si vous voulez aller avec le net/http approche et vous obtenez une erreur, il est préférable de le coller comme une nouvelle question. Me semble que l'ont -sl'url de la page, et -v tous dans la même chaîne de caractères qui existe.
Daniel Farrell

Dans d'autres langues

Cette page est dans d'autres langues

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