Maison >développement back-end >Golang >Analyse et réponses aux problèmes courants dans le développement du framework Golang
Comment analyser le corps d'une requête JSON ? Utilisez ioutil.ReadAll() pour lire le corps de la requête. Utilisez json.Unmarshal() pour analyser le corps JSON. Comment puis-je utiliser un middleware pour vérifier qu'une requête HTTP est authentifiée ? Créez une fonction middleware pour valider le jeton. Enregistrez les routes dans le routeur et utilisez un middleware pour gérer les demandes. Comment obtenir une connexion à la base de données via le contexte de requête HTTP ? Créez une fonction middleware pour obtenir la connexion à la base de données. Stockez la connexion dans le contexte dans la fonction middleware. Enregistrez les routes dans le routeur et utilisez un middleware pour gérer les demandes.
Analyse et réponses aux problèmes courants dans le développement du framework GoLang
Au cours du processus de développement du framework GoLang, nous rencontrerons divers problèmes. Cet article rassemble plusieurs des questions les plus courantes et fournit des réponses détaillées et des cas pratiques.
Question 1 : Comment analyser le corps de la requête 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 请求正文 }
Question 2 : Comment utiliser un middleware pour vérifier qu'une requête HTTP est authentifiée ?
// 验证 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) }
Question 3 : Comment obtenir la connexion à la base de données via le contexte de requête 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) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!