11. 搭建较通用的GoWeb开发脚手架
以下是一个基于Go语言的Web开发脚手架的简化版本,包括路由配置、中间件使用和错误处理。
package main
import (
"net/http"
"github.com/gorilla/mux"
)
// 自定义的中间件,例如日志记录、身份验证等
func MyMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 在处理请求之前执行的代码
// 例如记录日志
// log.Println(r.Method, r.RequestURI)
next.ServeHTTP(w, r)
// 在处理请求之后执行的代码
// 可以用来记录响应状态码、处理响应数据等
})
}
// 错误处理器
func ErrorHandler(w http.ResponseWriter, r *http.Request, err error) {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
func main() {
router := mux.NewRouter()
// 为所有请求添加自定义中间件
router.Use(MyMiddleware)
// 静态文件服务
router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
// API路由
api := router.PathPrefix("/api/v1").Subrouter()
api.HandleFunc("/users", GetUsers).Methods("GET")
api.HandleFunc("/users", CreateUser).Methods("POST")
// 错误处理器,当发生panic时使用
defer func() {
if r := recover(); r != nil {
ErrorHandler(nil, nil, r.(error))
}
}()
http.Handle("/", router)
http.ListenAndServe(":8080", nil)
}
// 示例API处理函数
func GetUsers(w http.ResponseWriter, r *http.Request) {
// 处理获取用户的逻辑
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
// 处理创建用户的逻辑
}
这个脚手架包括了基本的路由配置、中间件使用、静态文件服务和错误处理。在实际应用中,你可以根据需要添加更多的功能,比如认证、数据库交互、单元测试等。
评论已关闭