Golang ialah bahasa pengaturcaraan yang cekap, ringkas dan berprestasi tinggi. Ciri utamanya ialah keunggulannya berbanding bahasa lain dari segi kelajuan pelaksanaan kod. Penghalaan di Golang ialah bahagian penting dalam pembangunan web dan memerlukan penghalaan untuk memetakan permintaan kepada pengendali yang betul. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan penghalaan.
1. Cipta pelayan HTTP asas
Pertama, kita perlu mencipta pelayan HTTP asas pada komputer tempatan.
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", hello) log.Fatal(http.ListenAndServe(":8080", nil)) } func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }
Kod di atas memulakan pelayan HTTP menggunakan pakej http
terbina dalam Go. Gunakan fungsi http.HandleFunc
untuk menentukan pemproses yang anda mahu hantar permintaan dan gunakan fungsi http.ListenAndServe
untuk memulakan pelayan pada port 8080.
2. Tambah penghalaan
Kod di atas hanya boleh mengendalikan laluan akar. Sekarang kita akan menambah pengendali lain untuk mengendalikan laluan lain.
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", home) http.HandleFunc("/about", about) log.Fatal(http.ListenAndServe(":8080", nil)) } func home(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Home Page") } func about(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About Page") }
Dalam kod di atas, kami menggunakan fungsi http.HandleFunc
untuk mentakrifkan dua fungsi pengendali: home
dan about
. Kami juga memetakannya ke laluan /
dan /about
.
3. Gunakan perpustakaan pihak ketiga untuk melaksanakan penghalaan
Di Golang, terdapat juga beberapa perpustakaan pihak ketiga yang boleh membantu kami melaksanakan penghalaan. Salah satu yang paling popular ialah perpustakaan mux
.
Untuk menggunakan mux
untuk melaksanakan penghalaan, kami perlu mengubah suai kod di atas seperti berikut:
package main import ( "fmt" "log" "net/http" "github.com/gorilla/mux" ) func main() { router := mux.NewRouter() router.HandleFunc("/", home) router.HandleFunc("/about", about) log.Fatal(http.ListenAndServe(":8080", router)) } func home(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Home Page") } func about(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About Page") }
Dalam kod di atas, kami menggunakan perpustakaan gorilla/mux
untuk mengendalikan penghalaan. Kami mula-mula membuat contoh mux.Router
. Kami kemudian mentakrifkan dua fungsi pengendali dan mengikatnya ke laluan yang sama seperti di atas.
4. Tambahkan penghalaan dinamik
Kami juga boleh menetapkan laluan sebagai laluan dinamik untuk mengendalikan permintaan yang serupa dengan /user/10
. Dalam kes ini, 10
ialah bahagian dinamik dan boleh ditukar mengikut keperluan.
Kita boleh menggunakan fungsi mux.Vars()
untuk mengekstrak nilai seperti 10
dan menghantarnya semula kepada pelanggan menggunakan fungsi http.ResponseWriter
.
package main import ( "fmt" "log" "net/http" "github.com/gorilla/mux" ) func main() { router := mux.NewRouter() router.HandleFunc("/", home) router.HandleFunc("/about", about) // 添加动态路由 router.HandleFunc("/user/{id}", func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id := vars["id"] fmt.Fprintf(w, "User ID: %v", id) }) log.Fatal(http.ListenAndServe(":8080", router)) } func home(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Home Page") } func about(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About Page") }
Kod di atas memetakan laluan /user/{id}
ke fungsi tanpa nama yang mengekstrak nilai "id" dan menghantarnya kembali kepada pelanggan.
5 Pengumpulan laluan
Akhir sekali, kita boleh mengelompokkan laluan. Ini menjadikan kod lebih mudah diurus, terutamanya dalam aplikasi dengan banyak laluan.
package main import ( "fmt" "log" "net/http" "github.com/gorilla/mux" ) func main() { router := mux.NewRouter() // 创建子路由器 api := router.PathPrefix("/api").Subrouter() api.HandleFunc("/", apiHome) api.HandleFunc("/user", apiUser) // 添加其他路由 router.HandleFunc("/", home) router.HandleFunc("/about", about) log.Fatal(http.ListenAndServe(":8080", router)) } func home(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Home Page") } func about(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About Page") } func apiHome(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "API Home Page") } func apiUser(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "API User Page") }
Kod di atas menunjukkan cara menggunakan Subrouter()
untuk mencipta sub-router dan memetakannya ke laluan /api
. Selain itu, kami menambah fungsi penghalaan dan pengendali asas yang lain.
6. Ringkasan
Dalam artikel ini, kami memperkenalkan kaedah pelaksanaan penghalaan dalam Go. Kami mulakan dengan mencipta pelayan HTTP asas dan kemudian mengoptimumkan kod menggunakan perpustakaan gorilla/mux
. Kami juga menunjukkan cara menggunakan penghalaan dinamik, cara mengumpulkan laluan dan cara menambah pengendali pada laluan.
Fungsi penghalaan Golang berkuasa dan sangat mudah digunakan. Ia membantu pembangun membina aplikasi web yang cekap dan berprestasi tinggi sambil mengurangkan masa pembangunan dan kerumitan kod.
Atas ialah kandungan terperinci Contoh untuk menerangkan cara menggunakan Golang untuk melaksanakan penghalaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!