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那样丰富的功能,但正因为简单,学习成本低,性能也不错。对于需要更多功能的大型项目,可以考虑使用更成熟的路由框架。

回到顶部