Perutean web adalah teknik menetapkan permintaan HTTP ke fungsi pengendali yang beroperasi pada jalur URL yang ditentukan. Perutean sering digunakan untuk membangun aplikasi satu halaman (SPA) dan API. Di router, kode mendefinisikan urutan tindakan yang menyertai permintaan pengguna.

Pustaka standar Go memiliki sebagian besar fungsi yang Anda perlukan untuk membangun aplikasi web, termasuk perutean. Anda dapat menggunakan MelayaniMux ketik di bersih/http paket untuk penanganan rute dasar. Jika Anda membutuhkan penanganan rute yang lebih kompleks, ada banyak paket perutean yang dapat dipilih.

Memulai Perutean di Go

Ekosistem Go adalah rumah bagi paket perutean yang mengabstraksikan yang tidak perlu dan membuatnya lebih mudah untuk membangun aplikasi dan layanan web.

Banyak kerangka kerja web Go mengimplementasikan beberapa paket perutean ini.

Berikut adalah model struct sederhana untuk JSON respons Anda akan kembali ke klien dalam tutorial ini.

Tipe Info struktur {
Pesan rangkaian`json:"pesan"`
Keterangan rangkaian`json:"deskripsi"`
}
instagram viewer

Sebagian besar router Go masih menggunakan net/http Penulis Tanggapan dan Meminta metode sebagai parameter dalam fungsi handler.

fungsihalo(penulis http. ResponseWriter, minta *http. Meminta) {
// logika bisnis fungsi handler di sini
}

Juga, Anda harus memulai server dengan DengarkanDanLayani metode untuk memulai server di sebagian besar paket.

salah := http. DengarkanDanServe(":8000", router)

jika salah != nol {
kembali
}

Berikut adalah beberapa paket perutean populer di ekosistem Go.

1. Router Gorilla Mux

Paket Gorilla Mux mengimplementasikan router permintaan dan pengirim permintaan untuk permintaan HTTP. Ini seperti http. MelayaniMux metode tetapi dengan fungsionalitas tambahan.

Router Gorilla Mux mengimplementasikan http. Pawang antarmuka dan metodenya kompatibel dengan MelayaniMux metode. Paket ini juga mengimplementasikan beberapa skema URL dan Anda dapat menggunakan router sebagai sub router (rute bersarang) untuk menentukan rute serupa.

Itu Gorila Mux paket adalah bagian dari toolkit web Gorilla. Toolkit ini mencakup paket terkait web untuk memecahkan banyak masalah dari membuat pengguna tetap masuk dengan Sesi untuk penyimpanan data menggunakan Cookie.

Jalankan perintah ini di terminal ruang kerja Anda untuk menginstal paket Gorilla Mux.

Pergilah dapatkan -u github.com/gorilla/mux

Inilah cara Anda dapat mengatur DAPATKAN meminta rute ke fungsi handler yang mengkodekan ke respons JSON dengan paket Gorilla Mux.

impor (
"pengkodean/json"
"github.com/gorilla/mux"
"catatan"
"bersih/http"
)

fungsihalo(penulis http. ResponseWriter, minta *http. Meminta) {
tanggapan := Info {
Pesan: "Berhasil",
Deskripsi: "Anda telah berhasil menulis ke klien",
}

salah := json. NewEncoder (penulis).Encode (respon)

jika salah != nol {
catatan. Fataln (err)
}
}

fungsiutama() {
router := mux. Router Baru()
router. HandleFunc("/halo", halo).Metode("DAPATKAN")
salah := http. DengarkanDanServe(":8000", router)

jika salah != nol {
kembali
}
}

Itu halo fungsi handler mengkodekan struct ke JSON menggunakan Menyandi metode Encoder Baru struktur.

Itu utama fungsi menetapkan instance router Gorilla Mux baru ke router variabel. Ia kemudian memanggil MenanganiFungsi metode untuk memetakan rute ke fungsi handler. Anda dapat menggunakan Metode metode untuk menentukan jenis permintaan.

2. Chi Router

Itu Chi Router adalah router yang ringan, cepat, dan dapat dikomposisi untuk membangun layanan web berbasis HTTP di Go. Router Chi kompatibel dengan http paket, dan tidak ada dependensi eksternal untuk router.

Tidak seperti banyak router, Chi menyediakan kontrol konteks dengan konteks paket untuk penanganan permintaan tepat waktu.

Instal router Chi ke modul Go Anda dengan perintah ini.

Pergilah dapatkan github.com/Pergilah-chi/chi

Perutean dengan router Gorilla Mux dan router Chi sangat mirip. Inilah cara Anda dapat mengatur yang serupa DAPATKAN permintaan yang mengkodekan struct ke JSON sebagai respons.

impor (
"pengkodean/json"
"github.com/Pergilah-chi/chi/v5"
"catatan"
"bersih/http"
)

fungsiutama() {
router := chi. Router Baru()
router. Get("/halo", halo)
salah := http. DengarkanDanServe(":8000", router)

jika salah != nol {
kembali
}
}

fungsihalo(penulis http. ResponseWriter, minta *http. Meminta) {
tanggapan := Info {
Pesan: "Berhasil",
Deskripsi: "Anda telah berhasil menulis ke klien",
}

salah := json. NewEncoder (penulis).Encode (respon)

jika salah != nol {
catatan. Fataln (err)
}
}

Itu halo fungsi handler adalah fungsi handler untuk DAPATKAN meminta.

Dalam utama fungsi, router variabel adalah contoh router Chi. Anda dapat menentukan metode permintaan dengan nama metode; pada kasus ini, Mendapatkan mengambil pengidentifikasi fungsi route dan handler sebagai parameter.

3. Paket HttpRouter

Itu HttpRouter package adalah multiplexer permintaan yang sangat berkinerja dan ringan. Ini menyediakan lebih banyak fungsi daripada MelayaniMux implementasi paket http.

Paket HttpRouter memiliki jejak memori yang kecil, kinerja tinggi, dan skalabilitas yang baik. Ini adalah salah satu router tertua dan paling sering digunakan di ekosistem Go, diimplementasikan di banyak kerangka kerja Go yang populer, termasuk perpustakaan Gin.

Menjalankan perintah ini di terminal direktori kerja Anda akan menginstal paket HttpRouter.

Pergilah dapatkan github.com/julienschmidt/httprouter

Perutean dengan HttpRouter sedikit berbeda dari router Chi dan Gorilla Mux.

Inilah cara Anda dapat mengatur permintaan GET sederhana dengan paket HttpRouter.

impor (
"pengkodean/json"
"github.com/julienschmidt/httprouter"
"catatan"
"bersih/http"
)

fungsiutama() {
router := httprouter. Baru()
router. GET("/halo", halo)
salah := http. DengarkanDanServe(":8000", router)

jika salah != nol {
kembali
}
}

fungsihalo(penulis http. ResponseWriter, minta *http. Permintaan, _ httprouter. Param) {
tanggapan := Info {
Pesan: "Berhasil",
Deskripsi: "Anda telah berhasil mencapai titik akhir API",
}

salah := json. NewEncoder (penulis).Encode (respon)

jika salah != nol {
catatan. Fataln (err)
}
}

Fungsi handler untuk paket HttpRouter harus memiliki: Params metode router HTTP.

Itu router variabel adalah turunan dari HttpRouter. Anda dapat mengatur permintaan GET dengan DAPATKAN metode yang mengambil rute dan pengidentifikasi fungsi handler.

4. Router Pat

Menepuk adalah multiplexer permintaan HTTP gaya Sinatra yang bekerja dengan paket net/http Go. Router Pat tidak memiliki fungsi apa pun selain perutean.

Jalankan perintah ini di direktori kerja Anda untuk menginstal Pat Router

Pergilah dapatkan github.com/bmizerany/pat

Router Pat mengimplementasikan fungsionalitas yang mirip dengan MelayaniMux metode.

Inilah cara Anda dapat menangani perutean permintaan dengan menepuk kemasan.

impor (
"pengkodean/json"
"github.com/bmizerany/pat"
"catatan"
"bersih/http"
)

fungsihalo(penulis http. ResponseWriter, minta *http. Meminta) {
tanggapan := Info {
Pesan: "Berhasil",
Deskripsi: "Anda telah berhasil mencapai titik akhir",
}

salah := json. NewEncoder (penulis).Encode (respon)

jika salah != nol {
catatan. Fataln("err")
}
}

fungsiutama() {
router := pat. Baru() // contoh router
router. Dapatkan("/halo", http. HandlerFunc (halo))
http. Menangani ("/", router)
salah := http. DengarkanDanServe(":12345", nol)

jika salah != nol {
catatan. Fatal("DengarkanDanLayani: ", err)
}
}

Itu Baru metode mengembalikan instance router. Anda harus membungkus fungsi handler dengan HandlerFungsi metode. Anda kemudian dapat menggunakan Menangani metode untuk menentukan jalur root dan memasang instance router sebelum memulai server.

Membangun Router Tidak Sesulit Itu

Semua router dalam artikel ini mengimplementasikan fungsionalitas dari paket net dan http. Anda dapat melihat dokumentasi metode ServeMux untuk mempelajari cara mereplikasi router dengan fungsionalitas tambahan yang sesuai dengan kebutuhan Anda.

Kerangka kerja seperti Gin dan Fiber menyertakan fungsionalitas perutean dari paket net atau paket eksternal yang mengimplementasikannya.