0Pricing
Go Academy · บทเรียน

การกำหนดเส้นทางและพารามิเตอร์เส้นทาง

ลงทะเบียนตัวจัดการและแยกวิเคราะห์พารามิเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างเซิร์ฟเวอร์ HTTP
  2. การกำหนดเส้นทางและพารามิเตอร์เส้นทาง
  3. รูปแบบมิดเดิลแวร์
  4. การปิดระบบอย่างนุ่มนวล
← กลับไปที่ Go Academy