Go:
ส่งคำขอ HTTP
วิธีการ:
ใน Go, การส่งคำขอ HTTP และการจัดการคำตอบเกี่ยวข้องกับการใช้แพ็คเกจ net/http
นี่คือตัวอย่างทีละขั้นตอนในการส่งคำขอ GET แบบง่ายและอ่านคำตอบ:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
// กำหนด URL ของทรัพยากร
url := "http://example.com"
// ใช้ http.Get เพื่อส่งคำขอ GET
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
// ปิดตัวอ่านข้อมูลเมื่อฟังก์ชันสิ้นสุด
defer resp.Body.Close()
// อ่านตัวอ่านข้อมูลคำตอบ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
// แปลงตัวอ่านข้อมูลคำตอบเป็นสตริงและพิมพ์มัน
fmt.Println(string(body))
}
ตัวอย่างผลลัพธ์ (ย่อเพื่อความกระชับ):
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</html>
เพื่อส่งคำขอ POST พร้อมข้อมูลฟอร์ม คุณสามารถใช้ http.PostForm
:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func main() {
// กำหนด URL และข้อมูลฟอร์ม
url := "http://example.com/form"
data := url.Values{}
data.Set("key", "value")
// ส่งคำขอ POST พร้อมข้อมูลฟอร์ม
resp, err := http.PostForm(url, data)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// อ่านและพิมพ์คำตอบ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
การศึกษาเพิ่มเติม
แพ็คเกจ net/http
ใน Go ให้วิธีการที่ทรงพลังและยืดหยุ่นในการโต้ตอบกับเซิร์ฟเวอร์ HTTP การออกแบบของมันสะท้อนถึงการเน้นความเรียบง่าย, ประสิทธิภาพ, และความแข็งแกร่งของ Go เมื่อเริ่มต้น ฟังก์ชั่นการจัดการข้อมูล JSON หรือ XML ต้องสร้างร่างข้อมูลคำขอด้วยตนเองและตั้งค่าส่วนหัวที่เหมาะสม ตามที่ Go พัฒนาขึ้น ชุมชนได้พัฒนาแพ็คเกจระดับสูงขึ้นที่ทำให้งานเหล่านี้ง่ายขึ้น เช่น gorilla/mux
สำหรับการกำหนดเส้นทาง และ gjson
สำหรับการจัดการ JSON
หนึ่งในแง่มุมที่น่าสังเกตของไคลเอนต์ HTTP ของ Go คือการใช้ interfaces และ structs เช่น http.Client
และ http.Request
ซึ่งทำให้สามารถปรับแต่งและทดสอบได้อย่างกว้างขวาง เช่น คุณสามารถปรับเปลี่ยน http.Client
เพื่อหมดเวลาคำขอหรือรักษาการเชื่อมต่อเพื่อประสิทธิภาพ
ทางเลือกที่พิจารณาสำหรับการโต้ตอบ HTTP ที่ง่ายกว่าคือการใช้ไลบรารีบุคคลที่สาม เช่น “Resty” หรือ “Gentleman” แพ็คเกจเหล่านี้เสนอการแสดงความคิดในระดับที่สูงขึ้นสำหรับคำขอ HTTP, ทำให้งานทั่วไปง่ายขึ้น อย่างไรก็ตาม การเข้าใจและใช้งานแพ็คเกจ net/http
ที่อยู่ภายใต้เป็นสิ่งสำคัญสำหรับการจัดการกับสถานการณ์การโต้ตอบ HTTP ที่ซับซ้อนหรือเป็นเอกลักษณ์ ซึ่งเป็นพื้นฐานที่คุณลักษณะของการทำงานพร้อมกันของ Go และไลบรารีมาตรฐานที่ทรงพลังสามารถถูกใช้ประโยชน์ได้อย่างเต็มที่