Rumah > pembangunan bahagian belakang > Golang > Go &#s http.servemux adalah semua yang anda perlukan

Go &#s http.servemux adalah semua yang anda perlukan

Mary-Kate Olsen
Lepaskan: 2025-01-27 22:07:10
asal
919 orang telah melayarinya

Pengoptimuman dan analisis aplikasi http.ServeMux dalam perpustakaan standard Go 1.22

Dalam bidang pembangunan Go Web, untuk mencapai fungsi penghalaan yang lebih cekap dan fleksibel, ramai pembangun memilih untuk memperkenalkan perpustakaan pihak ketiga seperti httprouter dan gorilla/mux. Walau bagaimanapun, dalam versi Go 1.22, pegawai tersebut telah mengoptimumkan http.ServeMux dengan ketara dalam perpustakaan standard, yang dijangka mengurangkan pergantungan pembangun pada perpustakaan penghalaan pihak ketiga.

1. Sorotan Go 1.22: Keupayaan padanan corak dipertingkatkan

Go 1.22 melaksanakan cadangan yang sangat dinanti-nantikan untuk meningkatkan keupayaan padanan corak pemultipleks perkhidmatan HTTP lalai dalam pakej bersih/http perpustakaan standard. Pemultipleks sedia ada (http.ServeMux) hanya boleh menyediakan fungsi pemadanan laluan asas, yang agak terhad, menyebabkan sejumlah besar perpustakaan pihak ketiga muncul untuk memenuhi keperluan pembangun untuk fungsi penghalaan yang lebih berkuasa. Pemultipleks baharu dalam Go 1.22 akan menutup jurang ciri dengan ketara dengan perpustakaan pihak ketiga dengan memperkenalkan keupayaan pemadanan lanjutan. Artikel ini secara ringkas akan memperkenalkan pemultipleks baharu (mux), menyediakan contoh pelayan REST, dan membandingkan prestasi mux perpustakaan standard baharu dengan gorila/mux.

2. Cara menggunakan mux baharu

Bagi pembangun Go yang mempunyai pengalaman menggunakan mux/penghala pihak ketiga (seperti gorila/mux), menggunakan mux standard baharu akan menjadi perkara yang mudah dan biasa. Adalah disyorkan bahawa pemaju terlebih dahulu membaca dokumentasi rasminya, yang ringkas dan jelas.

(1) Contoh penggunaan asas

Kod berikut menunjukkan beberapa keupayaan padanan corak baharu mux:

<code class="language-go">package main
import (
  "fmt"
  "net/http"
)
func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("GET /path/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "got path\n")
  })
  mux.HandleFunc("/task/{id}/", func(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")
    fmt.Fprintf(w, "handling task with %s\n", id)
  })
  http.ListenAndServe(":8090", mux)
}</code>
Salin selepas log masuk
Salin selepas log masuk

Pengaturcara Go yang berpengalaman akan segera melihat dua ciri baharu:

  1. Dalam pengendali pertama, kaedah HTTP (GET dalam kes ini) digunakan secara eksplisit sebagai sebahagian daripada corak. Ini bermakna pengendali ini hanya membalas permintaan GET untuk laluan bermula dengan /path/ dan tidak akan mengendalikan permintaan untuk kaedah HTTP lain.
  2. Dalam pengendali kedua, komponen laluan kedua {id} mengandungi aksara kad bebas, yang tidak disokong dalam versi sebelumnya. Kad bebas ini boleh memadankan komponen laluan tunggal dan pengendali boleh mendapatkan nilai padanan melalui kaedah PathValue permintaan.

Berikut ialah contoh menguji pelayan ini menggunakan arahan curl:

<code class="language-bash">$ gotip run sample.go
# 在另一个终端测试
$ curl localhost:8090/what/
404 page not found
$ curl localhost:8090/path/
got path
$ curl -X POST localhost:8090/path/
Method Not Allowed
$ curl localhost:8090/task/leapcell/
handling task with leapcell</code>
Salin selepas log masuk
Salin selepas log masuk

Seperti yang dapat dilihat daripada keputusan ujian, pelayan akan menolak permintaan POST untuk /path/ dan hanya membenarkan permintaan GET (curl menggunakan permintaan GET secara lalai). Pada masa yang sama, apabila permintaan sepadan, aksara kad bebas id akan diberikan nilai yang sepadan. Pembangun dinasihatkan untuk merujuk kepada dokumentasi ServeMux baharu secara terperinci untuk mengetahui lebih lanjut tentang ciri seperti laluan mengekor dan {id} peraturan padanan kad bebas, serta padanan ketat laluan yang berakhir dengan {$}.

(2) Pengendalian konflik mod

Cadangan ini memberi perhatian khusus kepada kemungkinan konflik antara mod yang berbeza. Berikut ialah contoh:

<code class="language-go">mux := http.NewServeMux()
mux.HandleFunc("/task/{id}/status/", func(w http.ResponseWriter, r *http.Request) {
        id := r.PathValue("id")
        fmt.Fprintf(w, "handling task status with %s\n", id)
})
mux.HandleFunc("/task/0/{action}/", func(w http.ResponseWriter, r *http.Request) {
        action := r.PathValue("action")
        fmt.Fprintf(w, "handling task action with %s\n", action)
})</code>
Salin selepas log masuk
Salin selepas log masuk

Apabila pelayan menerima permintaan untuk /task/0/status/, kedua-dua pengendali boleh memadankan permintaan ini. Dokumentasi ServeMux baharu memperincikan peraturan keutamaan mod dan cara mengendalikan kemungkinan konflik. Jika konflik berlaku, proses pendaftaran akan mencetuskan panik. Untuk contoh di atas, mesej ralat berikut akan dipaparkan:

<code class="language-go">package main
import (
  "fmt"
  "net/http"
)
func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("GET /path/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "got path\n")
  })
  mux.HandleFunc("/task/{id}/", func(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")
    fmt.Fprintf(w, "handling task with %s\n", id)
  })
  http.ListenAndServe(":8090", mux)
}</code>
Salin selepas log masuk
Salin selepas log masuk

Mesej ralat ini terperinci dan praktikal. Dalam senario pendaftaran kompleks (terutamanya apabila mendaftar dalam pelbagai kedudukan kod sumber), butiran ini dapat membantu pemaju dengan cepat mencari dan menyelesaikan masalah konflik.

3. Gunakan MUX baru untuk melaksanakan pelayan

Siri Pelayan REST dalam GO menggunakan pelbagai kaedah untuk melaksanakan pelayan mudah dalam tugas/untuk digunakan dalam GO. Bahagian pertama adalah berdasarkan perpustakaan standard, dan bahagian kedua menggunakan penghala gorila/mux untuk memadamkan pelayan yang sama. Sekarang, dengan menggunakan MUX Go 1.22 yang dipertingkatkan untuk melaksanakan pelayan ini sekali lagi sangat penting, dan ia juga menarik untuk membandingkannya dengan penyelesaian menggunakan gorila/mux.

(1) Contoh Pendaftaran Mod

Berikut adalah sebahagian daripada kod pendaftaran mod wakil:

<code class="language-bash">$ gotip run sample.go
# 在另一个终端测试
$ curl localhost:8090/what/
404 page not found
$ curl localhost:8090/path/
got path
$ curl -X POST localhost:8090/path/
Method Not Allowed
$ curl localhost:8090/task/leapcell/
handling task with leapcell</code>
Salin selepas log masuk
Salin selepas log masuk

Sama seperti contoh gorila/mux, berikut adalah permintaan penghalaan kepada prosedur pemprosesan yang berbeza dengan jalan yang sama dengan kaedah HTTP tertentu. Apabila menggunakan HTTP.Servemux lama, peranti yang sepadan dengan jenis ini akan mengarahkan permintaan ke program pemprosesan yang sama, dan kemudian program pemprosesan akan menentukan operasi mengikuti mengikut kaedah permintaan.

(2) Proses Program Pemprosesan

Berikut adalah contoh program pemprosesan:

<code class="language-go">mux := http.NewServeMux()
mux.HandleFunc("/task/{id}/status/", func(w http.ResponseWriter, r *http.Request) {
        id := r.PathValue("id")
        fmt.Fprintf(w, "handling task status with %s\n", id)
})
mux.HandleFunc("/task/0/{action}/", func(w http.ResponseWriter, r *http.Request) {
        action := r.PathValue("action")
        fmt.Fprintf(w, "handling task action with %s\n", action)
})</code>
Salin selepas log masuk
Salin selepas log masuk

di sini proses diekstrak dari req.PathValue("id") untuk mengekstrak nilai ID, yang sama dengan kaedah gorila. Walau bagaimanapun, kerana {id} hanya sepadan dengan integer dengan ungkapan biasa, perlu memberi perhatian kepada kesilapan strconv.Atoi yang dikembalikan.

Secara umum, hasil akhir sangat mirip dengan penyelesaian menggunakan gorila/mux. Berbanding dengan kaedah perpustakaan standard tradisional, MUX baru boleh melakukan operasi penghalaan yang lebih rumit, mengurangkan keperluan meninggalkan keputusan penghalaan kepada program pemprosesan itu sendiri, dan meningkatkan kecekapan pembangunan dan penyelenggaraan kod.

empat, kesimpulan

"Laluan mana yang harus saya pilih?" Selepas GO 1.22 dibebaskan, jawapan kepada soalan ini mungkin berubah. Ramai pemaju akan mendapati bahawa perpustakaan standard baru MUX sudah cukup untuk memenuhi keperluan mereka, supaya mereka perlu bergantung pada pakej pihak ketiga.

Sudah tentu, sesetengah pemaju akan terus memilih perpustakaan pihak ketiga yang biasa, yang juga munasabah. Router seperti Gorilla/Mux masih mempunyai lebih banyak fungsi daripada perpustakaan standard. Di samping itu, banyak pengaturcara Go memilih rangka kerja ringan seperti GIN kerana ia bukan sahaja menyediakan router, tetapi juga menyediakan alat pembida yang diperlukan untuk membina hujung web.

Singkatnya, pengoptimuman Perpustakaan standard GO 1.22 http.serv standard "tidak diragukan lagi perubahan positif. Tidak kira sama ada pemaju memilih untuk menggunakan pakej pihak ketiga atau mendesak menggunakan perpustakaan standard, fungsi meningkatkan perpustakaan standard memberi manfaat kepada seluruh komuniti pembangunan GO.

Leapcell: yang paling sesuai untuk hosting aplikasi GO, tugas tak segerak, dan platform bebas pelayan Redis

Akhirnya, cadangkan platform yang paling sesuai untuk menggunakan perkhidmatan GO: Leapcell

  1. Sokongan pelbagai bahasa
    Gunakan javascript, python, pergi atau karat untuk pembangunan.
    Projek Tanpa Had Penyebaran Percuma
    Hanya bayar untuk penggunaan -no permintaan, tiada kos.
    faedah kos yang tiada tandingan
    Bayar atas permintaan, tiada kos terbiar.
  • Contoh: $ 25 menyokong 6.94 juta permintaan, dengan masa tindak balas purata 60 milisaat.
    Pengalaman pemaju yang dipermudahkan
    UI intuitif, tetapan mudah.
  • Paip CI/CD sepenuhnya automatik dan integrasi GITOPS.
  • Petunjuk Real -Time dan rekod log memberikan pandangan operasi.
    pengembangan mudah dan prestasi tinggi
    Sambungan automatik untuk mengendalikan tinggi dan penggabungan dengan mudah.
  • Perbelanjaan Operasi Zero -hanya fokus pada pembinaan.
Leapcell Twitter:

https://www.php.cn/link/7884effb9452a6d7a794999ef854afd

(Nota: Kerana saya tidak dapat mengakses pautan gambar, saya mengekalkan label gambar, sila pastikan laluan gambar betul.)

Atas ialah kandungan terperinci Go &#s http.servemux adalah semua yang anda perlukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan