Bagaimana untuk menghuraikan kandungan permintaan JSON? Gunakan ioutil.ReadAll() untuk membaca badan permintaan. Gunakan json.Unmarshal() untuk menghuraikan kandungan JSON. Bagaimanakah saya boleh menggunakan perisian tengah untuk mengesahkan bahawa permintaan HTTP disahkan? Cipta fungsi middleware untuk mengesahkan token. Daftar laluan dalam penghala dan gunakan perisian tengah untuk mengendalikan permintaan. Bagaimana untuk mendapatkan sambungan pangkalan data melalui konteks permintaan HTTP? Cipta fungsi middleware untuk mendapatkan sambungan pangkalan data. Simpan sambungan dalam konteks dalam fungsi middleware. Daftar laluan dalam penghala dan gunakan perisian tengah untuk mengendalikan permintaan.
Analisis dan jawapan kepada masalah biasa dalam pembangunan rangka kerja GoLang
Semasa proses pembangunan rangka kerja GoLang, kita akan menghadapi pelbagai masalah. Artikel ini mengumpulkan beberapa soalan yang paling biasa dan memberikan jawapan terperinci dan kes praktikal.
Soalan 1: Bagaimana untuk menghuraikan kandungan permintaan JSON?
// 解析 JSON 请求正文 func parseJSON(w http.ResponseWriter, r *http.Request) (map[string]interface{}, error) { body, err := ioutil.ReadAll(r.Body) if err != nil { return nil, err } defer r.Body.Close() var bodyMap map[string]interface{} if err := json.Unmarshal(body, &bodyMap); err != nil { return nil, err } return bodyMap, nil } // 实战案例 func handleJSON(w http.ResponseWriter, r *http.Request) { bodyMap, err := parseJSON(w, r) if err != nil { http.Error(w, "Invalid JSON", http.StatusBadRequest) return } // 处理 JSON 请求正文 }
Soalan 2: Bagaimana untuk menggunakan perisian tengah untuk mengesahkan bahawa permintaan HTTP disahkan?
// 验证 HTTP 请求是否经过身份验证的中间件 func AuthMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 获取 Authorization 头 authToken := r.Header.Get("Authorization") // 验证令牌有效性 if !validateToken(authToken) { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } // 继续执行请求处理程序 next.ServeHTTP(w, r) }) } // 实战案例 func main() { // 创建一个 HTTP 路由器 router := http.NewServeMux() // 注册路由,使用 AuthMiddleware 验证请求 router.HandleFunc("/protected", AuthMiddleware(http.HandlerFunc(handleProtected))) // 启动服务器 http.ListenAndServe(":8080", router) }
Soalan 3: Bagaimana untuk mendapatkan sambungan pangkalan data melalui konteks permintaan HTTP?
// 获取数据库连接的中间件 func DBMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 获取数据库连接 db, err := connectDB() if err != nil { http.Error(w, "Unable to connect to the database", http.StatusInternalServerError) return } // 将数据库连接存储在上下文中 ctx := context.WithValue(r.Context(), "db", db) // 继续执行请求处理程序 next.ServeHTTP(w, r.WithContext(ctx)) }) } // 实战案例 func main() { // 创建一个 HTTP 路由器 router := http.NewServeMux() // 注册路由,使用 DBMiddleware 获取数据库连接 router.HandleFunc("/protected", DBMiddleware(http.HandlerFunc(handleProtected))) // 启动服务器 http.ListenAndServe(":8080", router) }
Atas ialah kandungan terperinci Analisis dan jawapan kepada masalah biasa dalam pembangunan rangka kerja golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!