การกำหนดเส้นทางและพารามิเตอร์เส้นทาง
ลงทะเบียนตัวจัดการและแยกวิเคราะห์พารามิเตอร์ URL
การกำหนดเส้นทางและพารามิเตอร์เส้นทาง เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อจำกัดของ mux มาตรฐาน
http.ServeMux เริ่มต้นไม่รองรับพารามิเตอร์เส้นทาง เช่น /users/{id} หรือการกำหนดเส้นทางตามวิธีการ Go 1.22 เพิ่มการรองรับรูปแบบเส้นทางที่มีความสามารถมากขึ้น
รูปแบบเส้นทางที่ปรับปรุงใน Go 1.22
ตั้งแต่ Go 1.22 เป็นต้นไป ServeMux รองรับคำนำหน้าวิธีการและพารามิเตอร์เส้นทาง:
mux.HandleFunc("GET /users/{id}", func(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
fmt.Fprintln(w, "user:", id)
})r.PathValue
r.PathValue("name") แยกส่วนที่มีชื่อออกจากรูปแบบ URL ที่ตรงกันได้ โดยรองรับตั้งแต่ Go 1.22 เป็นต้นไป
// Pattern: "GET /products/{category}/{id}"
category := r.PathValue("category")
id := r.PathValue("id")การแยกวิเคราะห์เส้นทางด้วยตนเอง
สำหรับ Go รุ่นก่อน 1.22 หรือกฎที่ซับซ้อน ให้แยกส่วนของเส้นทางด้วย strings.Split(r.URL.Path, "/"):
parts := strings.Split(strings.Trim(r.URL.Path, "/"), "/")
// /users/42 → ["users", "42"]การกำหนดเส้นทางตามวิธีการ
ใช้ switch กับ r.Method เพื่อจัดการตรรกะของแต่ละวิธีการภายในตัวจัดการเดียว:
switch r.Method {
case http.MethodGet:
getHandler(w, r)
case http.MethodPost:
createHandler(w, r)
default:
w.WriteHeader(http.StatusMethodNotAllowed)
}เราเตอร์จากผู้พัฒนาภายนอกที่ได้รับความนิยม
ไลบรารีอย่าง gorilla/mux, chi และ httprouter มีความสามารถด้านการกำหนดเส้นทางที่หลากหลายกว่า เช่น ข้อจำกัดด้วยนิพจน์ทั่วไป กลุ่มที่มีชื่อ โซ่มิดเดิลแวร์ และเราเตอร์ย่อย
เราเตอร์ chi
chi เป็นเราเตอร์น้ำหนักเบาตามแนวทางของ Go และเข้ากันได้กับตัวจัดการ net/http:
r := chi.NewRouter()
r.Get("/users/{id}", getUser)
http.ListenAndServe(":8080", r)พารามิเตอร์การค้นหา
อ่านพารามิเตอร์การค้นหาจาก r.URL.Query() ซึ่งส่งคืนแผนที่ url.Values:
page := r.URL.Query().Get("page")
if page == "" { page = "1" }ตัวแทนแบบใดก็ได้และการจับส่วนที่เหลือทั้งหมด
ในรูปแบบเส้นทางของ Go 1.22 {name...} คือตัวแทนแบบใดก็ได้ที่จับคู่กับส่วนที่เหลือของเส้นทาง:
mux.HandleFunc("/static/{path...}", serveStatic)เส้นทางซ้อนกัน
จัดกลุ่มเส้นทางที่เกี่ยวข้องด้วยเราเตอร์ย่อย หรือลงทะเบียนตัวจัดการโดยใช้คำนำหน้าร่วม r.Route ของ chi จะสร้างเราเตอร์ย่อยสำหรับคำนำหน้า
การเปลี่ยนเส้นทางเครื่องหมายทับท้าย
http.ServeMux จะเปลี่ยนเส้นทาง /path/ ไปเป็น /path หรือในทางกลับกันโดยอัตโนมัติ หากต้องการปิดการทำงาน ให้ตัดเครื่องหมายทับท้ายออกในมิดเดิลแวร์ก่อนที่ mux จะได้รับคำขอ
ตรวจสอบความเข้าใจ
ใน Go 1.22 เป็นต้นไป จะแยกส่วน {id} จากรูปแบบ URL ที่ตรงกันได้อย่างไร
ทบทวน: การกำหนดเส้นทางและพารามิเตอร์เส้นทาง
ประเด็นสำคัญ:
- Go 1.22: คำนำหน้าวิธีการและพารามิเตอร์เส้นทาง {name} ใน ServeMux
- r.PathValue("name") ใช้แยกส่วนเส้นทางที่มีชื่อ
- ใช้ switch ของวิธีการเพื่อจัดการตรรกะของแต่ละวิธีการ
- ใช้เราเตอร์จากผู้พัฒนาภายนอก เช่น chi และ gorilla/mux สำหรับการกำหนดเส้นทางที่ซับซ้อน
คำถามที่พบบ่อย
บทเรียน “การกำหนดเส้นทางและพารามิเตอร์เส้นทาง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดเส้นทางและพารามิเตอร์เส้นทาง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเส้นทางและพารามิเตอร์เส้นทาง”
ลงทะเบียนตัวจัดการและแยกวิเคราะห์พารามิเตอร์ URL คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดเส้นทางและพารามิเตอร์เส้นทาง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างเซิร์ฟเวอร์ HTTP
- การกำหนดเส้นทางและพารามิเตอร์เส้นทาง
- รูปแบบมิดเดิลแวร์
- การปิดระบบอย่างนุ่มนวล