Analisis prinsip pelaksanaan kod sumber rangka kerja Go adalah seperti berikut: Penghalaan HTTP menggunakan pepohon awalan dalam pakej mux untuk mentakrifkan peraturan penghalaan antara kaedah permintaan, laluan URI dan pengendali. Middleware ditakrifkan melalui HandlerFunc, membenarkan logik tersuai seperti pengesahan dan pengelogan dilakukan sebelum atau selepas pemprosesan permintaan.
Artikel ini akan menyelidiki prinsip pelaksanaan kod sumber rangka kerja Go untuk membantu anda memahami mekanisme kerja dalamannya. Melalui kes praktikal, kami akan menumpukan pada pelaksanaan khusus penghalaan HTTP dan mekanisme perisian tengah.
Komponen teras penghalaan HTTP dalam rangka kerja Go ialah pakej mux
. Ia menyediakan cara yang fleksibel untuk menentukan peraturan penghalaan, termasuk kaedah permintaan, laluan URI dan pengendali. mux
包。它提供了一种灵活的方式来定义路由规则,包括请求方法、URI 路径和处理程序。
package mux type Router struct { trees map[string]*routeNode // 其他字段 ... }
Router
类型维护了一个 trees
字段,其中包含一个前缀树映射,每个前缀对应一个 routeNode
。
import ( "github.com/go-chi/chi/v5" ) // 定义一个基本的 Go 框架路由器 r := chi.NewRouter() r.Get("/users", handler) // 运行服务器,监听端口 8080 http.ListenAndServe(":8080", r)
在这种情况下,/users
请求将被路由到名为 handler
的请求处理程序。
Go 框架中的中间件允许在处理请求之前或之后执行一些自定义逻辑。典型的中间件包括身份验证、记录和跨域资源共享 (CORS)。
package middleware type HandlerFunc func(http.Handler) http.Handler
HandlerFunc
类型定义了一个中间件函数,它接受一个 http.Handler
并返回另一个 http.Handler
import ( "github.com/go-chi/chi/v5/middleware" ) // 创建一个名为 `MyMiddleware` 的中间件 func MyMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 在请求处理之前执行自定义逻辑 w.Header().Set("X-Custom-Header", "value") next.ServeHTTP(w, r) // 在请求处理之后执行自定义逻辑 }) } // 将中间件添加到路由器 r.Use(middleware.MyMiddleware())
Router
mengekalkan medan trees
, yang mengandungi pemetaan pokok awalan, setiap awalan sepadan dengan routeNode
. Kes praktikalrrreee
Dalam kes ini, permintaan/users
akan dihalakan kepada pengendali permintaan bernama pengendali
. 🎜🎜Middleware🎜🎜Source code parsing🎜🎜Middleware dalam rangka kerja Go membolehkan melakukan beberapa logik tersuai sebelum atau selepas memproses permintaan. Perisian tengah biasa termasuk pengesahan, pengelogan dan perkongsian sumber silang asal (CORS). 🎜rrreee🎜Jenis HandlerFunc
mentakrifkan fungsi middleware yang menerima http.Handler
dan mengembalikan http.Handler
yang lain. 🎜🎜Kes praktikal🎜rrreee🎜Perisian tengah ini akan menetapkan X-Custom-Header kepada "nilai" sebelum setiap permintaan. 🎜Atas ialah kandungan terperinci Prinsip pelaksanaan kod sumber rangka kerja Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!