Como adicionar string com aspas e barras em golang

0

Pergunta

Eu vou compartilhar um exemplo

Eu quero a linha abaixo na cadeia golang curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

o código que eu escrevi:

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

mensagem: cadeia inesperado no fim da Linha.

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

Melhor resposta

1

cadeia inesperado no fim da Linha.

Você pode usar fmt.Sprintf para formatar um texto, de modo que você não tem que juntá-lo com a mão. Eu acho isso mais fácil de ler e escrever, para mim:

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

Parece que você está tentando criar um shell de comando para invocar o Curl. Melhor do que tentando escapar de seus curl argumentos para o shell, é invocar curl diretamente. Desta forma, você pode usar Ir para separar os argumentos sem ter de se preocupar com shell citar:

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

No entanto, se eu fosse você, eu iria usar https://pkg.go.dev/net/http para fazer o pedido e evitar os/exec inteiramente. O desempenho e a eficiência vai ser melhor, e a manipulação da resposta e as condições de erro será de forma mais fácil do que fazer isso através de curl e tentando analisar de saída e a alça de códigos de erro.

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

Obrigado pela resposta. Mas o que sobre os sinalizadores -u -s-e-v como incluir que
Pulkit Kundra

{"erro":"analisar \"-s http://<ip>/restconf/dados/ -v\": primeiro segmento do caminho na URL não pode conter dois pontos","manipulador":"POSTO /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: Falha ao criar pedido: analisar \"-s http://<ip>/restconf/dados/ -v\": primeiro segmento do caminho na URL não pode conter dois pontos","hora":"2021-11-24T05:13:21Z"} {"manipulador":"POSTO /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Falha ao obter dados do Namespace: <ip>","tempo":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Tenho o erro acima ao utilizar o pkg.ir.dev/net/http
Pulkit Kundra

Se você quiser ir com a net/http abordagem e você está recebendo um erro, melhor cole como uma nova pergunta. Parece-me que tem -so url, e -v todos na mesma seqüência de lá.
Daniel Farrell

Em outros idiomas

Esta página está em outros idiomas

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