Rumah >pembangunan bahagian belakang >Golang >Go Routing : Mengendalikan dan Mengumpulkan Laluan dengan net/http
Go 1.22 membawa dua peningkatan pada penghala pakej net/http: padanan kaedah dan kad bebas. Ciri ini membolehkan anda menyatakan laluan biasa sebagai corak dan bukannya kod Go. Walaupun ia mudah untuk dijelaskan dan digunakan, adalah satu cabaran untuk menghasilkan peraturan yang betul untuk memilih corak kemenangan apabila beberapa sepadan dengan permintaan.
Go 1.22 menambah ciri baharu pada pakej net/http mereka untuk menjadikannya alternatif yang baik untuk menggunakan perpustakaan pihak ketiga. Dalam artikel ini, kita akan melihat cara mengendalikan penghalaan menggunakan pakej net/http Golang. Kami akan bermula dengan pengendalian laluan asas dan kemudian meneruskan kepada mengumpulkan laluan tersebut.
Nota
Mari kita mulakan dengan melihat cara mendaftar laluan anda.
// main.go package main import ( "log" "net/http" ) func main() { router := http.NewServeMux() router.HandleFunc("GET /users/", getUsers) router.HandleFunc("POST /users/", createUser) router.HandleFunc("GET /users/{id}/", getUser) router.HandleFunc("DELETE /users/{id}/", deleteUser) err := http.ListenAndServe(":8000", router) if err != nil { log.Fatal(err) } } // Here goes the implementation for getUsers, getUser, createUser, deleteUser // Check the repo in services/users/routes.go type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` } var users []User = []User{ {ID: 1, Name: "Bumblebee", Email: "bumblebee@autobots.com"}, {ID: 2, Name: "Optimus Prime", Email: "optimus.prime@autobots.com"}, {ID: 3, Name: "Ironhide", Email: "ironhide@autobots.com"}, {ID: 4, Name: "Hot Rod", Email: "hot.rod@autobots.com"}, } func getUsers(w http.ResponseWriter, r *http.Request) { response := map[string]any{ "message": "Done", "users": users, } utils.WriteJSONResponse(w, http.StatusOK, response) }
Jom baca kod di atas:
Nota: Semasa membuat permintaan pastikan anda menambah garis miring. Tindakan sebaliknya akan mengembalikan respons 404 tidak ditemui
Contoh:
Permintaan Contoh:
// statusCode: 200 { "message": "Done", "users": [ { "id": 1, "name": "Bumblebee", "email": "bumblebee@autobots.com" }, { "id": 2, "name": "Optimus Prime", "email": "optimus.prime@autobots.com" }, { "id": 3, "name": "Ironhide", "email": "ironhide@autobots.com" }, { "id": 4, "name": "Hot Rod", "email": "hot.rod@autobots.com" } ] }
Seperti yang dapat kita lihat daripada di atas, ini memerlukan kita mendaftarkan semua titik akhir di tempat yang sama dan boleh hilang kawalan dengan cepat. Pengumpulan laluan membantu anda memastikan kod anda teratur, berskala dan boleh diselenggara dengan menggabungkan laluan dan logik yang berkaitan. Ia membolehkan anda menggunakan perisian tengah secara selektif, menggalakkan kebolehgunaan semula dan meningkatkan kebolehbacaan, terutamanya apabila aplikasi anda berkembang.
Sekarang mari kita lihat bagaimana kita boleh mengumpulkan laluan
Kami akan mulakan dengan mendaftarkan laluan secara tempatan dalam pakej di mana fungsi pengendalinya ditentukan. Langkah seterusnya ialah menyatukan semua laluan tersebut dan mulakan pelayan.
// services/users/routes.go package user import ( "fmt" "net/http" "strconv" "<your-project-name>/gorouting/utils" ) type Handler struct{} func NewHandler() *Handler { return &Handler{} } func (h *Handler) RegisterRoutes() *http.ServeMux { r := http.NewServeMux() r.HandleFunc("GET /", getUsers) r.HandleFunc("POST /", createUser) r.HandleFunc("GET /{id}/", getUser) r.HandleFunc("DELETE /{id}/", deleteUser) return r } // ...
Mari kita lihat kod tersebut.
// main.go package main import ( "log" "net/http" ) func main() { router := http.NewServeMux() router.HandleFunc("GET /users/", getUsers) router.HandleFunc("POST /users/", createUser) router.HandleFunc("GET /users/{id}/", getUser) router.HandleFunc("DELETE /users/{id}/", deleteUser) err := http.ListenAndServe(":8000", router) if err != nil { log.Fatal(err) } } // Here goes the implementation for getUsers, getUser, createUser, deleteUser // Check the repo in services/users/routes.go type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` } var users []User = []User{ {ID: 1, Name: "Bumblebee", Email: "bumblebee@autobots.com"}, {ID: 2, Name: "Optimus Prime", Email: "optimus.prime@autobots.com"}, {ID: 3, Name: "Ironhide", Email: "ironhide@autobots.com"}, {ID: 4, Name: "Hot Rod", Email: "hot.rod@autobots.com"}, } func getUsers(w http.ResponseWriter, r *http.Request) { response := map[string]any{ "message": "Done", "users": users, } utils.WriteJSONResponse(w, http.StatusOK, response) }
Di sini kita akan menumpukan pada kaedah Larian.
// statusCode: 200 { "message": "Done", "users": [ { "id": 1, "name": "Bumblebee", "email": "bumblebee@autobots.com" }, { "id": 2, "name": "Optimus Prime", "email": "optimus.prime@autobots.com" }, { "id": 3, "name": "Ironhide", "email": "ironhide@autobots.com" }, { "id": 4, "name": "Hot Rod", "email": "hot.rod@autobots.com" } ] }
“Dengan Go 1.22, net/http kini lebih serba boleh, menawarkan corak laluan yang meningkatkan kejelasan dan kecekapan. Pendekatan untuk mengumpulkan laluan ini menunjukkan betapa mudahnya untuk mengekalkan kod berskala sambil memanfaatkan keupayaan penghalaan terbina dalam Go." SembangGPT
Sekarang kami telah berjaya mengumpulkan laluan pengguna. Klon repo dan cuba tambah perkhidmatan lain.
Atas ialah kandungan terperinci Go Routing : Mengendalikan dan Mengumpulkan Laluan dengan net/http. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!