golang轻量级HTTP路由插件库ngamux的使用
golang轻量级HTTP路由插件库ngamux的使用
简介
ngamux是一个简单的Go语言HTTP路由库,具有轻量级和易用的特点。
安装
使用以下命令安装ngamux:
go get github.com/ngamux/ngamux
示例代码
基础使用示例
package main
import(
"net/http"
"github.com/ngamux/ngamux"
)
func main() {
// 创建新的ngamux实例
mux := ngamux.New()
// 定义根路由GET方法处理函数
mux.Get("/", func(rw http.ResponseWriter, r *http.Request) error {
// 返回JSON响应
return ngamux.Res(rw).
Status(http.StatusOK).
Json(ngamux.Map{
"message": "welcome!",
})
})
// 启动HTTP服务器
http.ListenAndServe(":8080", mux)
}
带中间件的示例
package main
import(
"net/http"
"github.com/ngamux/ngamux"
"github.com/ngamux/middleware/cors"
)
func main() {
// 创建新的ngamux实例
mux := ngamux.New()
// 使用CORS中间件
mux.Use(cors.New())
// 定义路由
mux.Get("/api", func(rw http.ResponseWriter, r *http.Request) error {
return ngamux.Res(rw).
Status(http.StatusOK).
Json(ngamux.Map{
"data": "protected resource",
})
})
http.ListenAndServe(":8080", mux)
}
提供的中间件
ngamux社区提供了一些常用的中间件:
- CORS
- Recover
- File Upload
- Log
- Auth JWT
- No Cache
- Ping
- Redirect
许可证
本项目采用Mozilla Public License 2.0许可证。
贡献者
感谢所有贡献者!
这个回答包含了ngamux的基本使用方法、安装方式、示例代码以及相关信息,完全基于提供的内容,没有添加任何假设或额外信息。
更多关于golang轻量级HTTP路由插件库ngamux的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang轻量级HTTP路由插件库ngamux的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang轻量级HTTP路由插件库ngamux使用指南
ngamux是一个轻量级的Golang HTTP路由库,设计简单易用,适合小型项目和API开发。下面我将详细介绍ngamux的使用方法。
安装ngamux
首先安装ngamux库:
go get github.com/ngamux/ngamux
基本使用
package main
import (
"fmt"
"net/http"
"github.com/ngamux/ngamux"
)
func main() {
mux := ngamux.New()
// 基本路由
mux.Get("/", func(rw http.ResponseWriter, r *http.Request) error {
return ngamux.Res(rw).Text("Hello, World!")
})
// 带参数的路由
mux.Get("/user/:id", func(rw http.ResponseWriter, r *http.Request) error {
id := ngamux.URLParam(r, "id")
return ngamux.Res(rw).Text(fmt.Sprintf("User ID: %s", id))
})
// 启动服务器
http.ListenAndServe(":8080", mux)
}
路由分组
ngamux支持路由分组,便于组织代码:
func main() {
mux := ngamux.New()
// API分组
api := mux.Group("/api")
api.Get("/users", getUsers)
api.Post("/users", createUser)
// 带中间件的分组
auth := mux.Group("/auth")
auth.Use(authMiddleware)
auth.Get("/profile", getProfile)
http.ListenAndServe(":8080", mux)
}
func getUsers(rw http.ResponseWriter, r *http.Request) error {
// 获取用户列表逻辑
return ngamux.Res(rw).JSON(ngamux.Map{
"users": []string{"Alice", "Bob"},
})
}
func createUser(rw http.ResponseWriter, r *http.Request) error {
// 创建用户逻辑
return ngamux.Res(rw).Status(http.StatusCreated).Text("User created")
}
func authMiddleware(next ngamux.Handler) ngamux.Handler {
return func(rw http.ResponseWriter, r *http.Request) error {
// 认证逻辑
token := r.Header.Get("Authorization")
if token != "valid-token" {
return ngamux.Res(rw).Status(http.StatusUnauthorized).Text("Unauthorized")
}
return next(rw, r)
}
}
func getProfile(rw http.ResponseWriter, r *http.Request) error {
return ngamux.Res(rw).JSON(ngamux.Map{
"name": "John Doe",
"email": "john@example.com",
})
}
中间件使用
ngamux支持全局和分组中间件:
func main() {
mux := ngamux.New()
// 全局中间件
mux.Use(loggerMiddleware)
// 路由特定中间件
mux.Get("/secure", authMiddleware, secureHandler)
http.ListenAndServe(":8080", mux)
}
func loggerMiddleware(next ngamux.Handler) ngamux.Handler {
return func(rw http.ResponseWriter, r *http.Request) error {
fmt.Printf("%s %s\n", r.Method, r.URL.Path)
return next(rw, r)
}
}
func secureHandler(rw http.ResponseWriter, r *http.Request) error {
return ngamux.Res(rw).Text("Secure content")
}
响应处理
ngamux提供了便捷的响应方法:
mux.Get("/responses", func(rw http.ResponseWriter, r *http.Request) error {
// 文本响应
// return ngamux.Res(rw).Text("Plain text response")
// JSON响应
// return ngamux.Res(rw).JSON(ngamux.Map{
// "key": "value",
// "num": 42,
// })
// 状态码+JSON
return ngamux.Res(rw).Status(http.StatusOK).JSON(ngamux.Map{
"success": true,
"message": "Operation completed",
})
})
错误处理
ngamux内置了错误处理:
mux.Get("/error", func(rw http.ResponseWriter, r *http.Request) error {
// 返回错误会自动转换为500状态码
// return fmt.Errorf("something went wrong")
// 自定义错误状态码
return ngamux.Error(http.StatusBadRequest, "Invalid request")
})
静态文件服务
func main() {
mux := ngamux.New()
// 静态文件服务
mux.Get("/static/*", ngamux.FileServer(http.Dir("public")))
http.ListenAndServe(":8080", mux)
}
实际项目结构示例
对于稍大点的项目,可以这样组织代码:
project/
├── main.go
├── handlers/
│ ├── user.go
│ └── auth.go
├── middlewares/
│ └── auth.go
└── routes/
└── api.go
// main.go
package main
import (
"net/http"
"github.com/ngamux/ngamux"
"project/routes"
)
func main() {
mux := ngamux.New()
routes.Setup(mux)
http.ListenAndServe(":8080", mux)
}
// routes/api.go
package routes
import (
"github.com/ngamux/ngamux"
"project/handlers"
"project/middlewares"
)
func Setup(mux *ngamux.Ngamux) {
api := mux.Group("/api")
api.Get("/users", handlers.GetUsers)
auth := api.Group("/auth")
auth.Use(middlewares.Auth)
auth.Get("/profile", handlers.GetProfile)
}
ngamux是一个非常简单轻量的路由库,适合小型项目或API开发。它没有Gin或Echo那样丰富的功能,但正因为简单,学习成本低,性能也不错。对于需要更多功能的大型项目,可以考虑使用更成熟的路由框架。