Как добавить строку с кавычками и косыми чертами в golang

0

Вопрос

Я поделюсь примером

Мне нужна строка ниже в строке golang curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

код, который я написал:

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

ошибаться: неожиданная строка в конце строки.

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

Лучший ответ

1

неожиданная строка в конце строки.

Вы можете использовать fmt.Sprintf чтобы отформатировать строку так, чтобы вам не пришлось сшивать ее вручную. Мне самому это легче читать и писать:

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

Похоже, вы пытаетесь создать команду оболочки для вызова Curl. Лучше, чем пытаться сбежать от твоего curl аргументы для оболочки, заключается в вызове curl непосредственно. Таким образом, вы можете использовать Go для разделения аргументов, не беспокоясь о цитировании оболочки:

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

Однако, если бы я был на вашем месте, я бы использовал https://pkg.go.dev/net/http чтобы сделать запрос и устранить os/exec полностью. Производительность и эффективность будут выше, а обработка ответа и любых условий ошибок будет намного проще, чем выполнение этого с помощью curl и пытается анализировать выходные данные и обрабатывать коды ошибок.

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

Спасибо за ответ. Но как насчет флагов-u-s и-v, как включить это
Pulkit Kundra

{"ошибка":"обработка \"-с сайта http://<ip>/restconf// данные-в\". первый путь сегмент в URL-адрес не может содержать двоеточие","дрессировщик","пост /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: не удалось создать заявку: разобрать \"-с сайта http://<ip>/restconf// данные-в\". первый путь сегмент в URL-адрес не может содержать двоеточие","время":"2021-11-24T05:13:21Z"} {"обработчик":"столб /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"не удалось получить данные из пространства имен: <ip>","время":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Получена вышеуказанная ошибка при использовании pkg.go.dev/net/http
Pulkit Kundra

Если вы хотите пойти с net/http подойдите, и вы получите ошибку, лучше всего вставить ее в качестве нового вопроса. Мне кажется, что у -s, URL-адрес и -v все в одной строке там.
Daniel Farrell

На других языках

Эта страница на других языках

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