ที่ไม่คาดหวังข้อความอยู่ที่ตำแหน่งจบบรรทัด.
คุณสามารถใช้ 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
โดยตรง ทางนี้คุณสามารถใช้ไปแยกกันอนที่อาร์กิวเมนต์หนึ่งตัวโดยไม่ต้องห่วงเรื่องเชลล์ที่อ้างถึง:
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 เพื่อทำสิ่งที่ร้องขอมาต้องการและ obviate 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!