基本用法
Hello World
Section titled “Hello World”package main
import "github.com/fox-gonic/fox"
func main() { r := fox.Default()
r.GET("/", func() string { return "Hello, World!" })
r.Run(":8080")}REST API 示例
Section titled “REST API 示例”package main
import ( "github.com/fox-gonic/fox" "github.com/fox-gonic/fox/httperrors")
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"`}
type CreateUserRequest struct { Name string `json:"name" binding:"required"` Email string `json:"email" binding:"required,email"`}
type UpdateUserRequest struct { ID int `uri:"id" binding:"required"` Name string `json:"name" binding:"required"` Email string `json:"email" binding:"required,email"`}
var users = []User{ {ID: 1, Name: "张三", Email: "zhangsan@example.com"}, {ID: 2, Name: "李四", Email: "lisi@example.com"},}
func main() { r := fox.Default()
// 列出用户 r.GET("/users", func() []User { return users })
// 根据 ID 获取用户 type UserParams struct { ID int `uri:"id" binding:"required"` }
r.GET("/users/:id", func(_ *fox.Context, req *UserParams) (*User, error) { for _, u := range users { if u.ID == req.ID { return &u, nil } } return nil, httperrors.ErrNotFound })
// 创建用户 r.POST("/users", func(_ *fox.Context, req *CreateUserRequest) (*User, error) { user := User{ ID: len(users) + 1, Name: req.Name, Email: req.Email, } users = append(users, user) return &user, nil })
// 更新用户 r.PUT("/users/:id", func(_ *fox.Context, req *UpdateUserRequest) (*User, error) { for i, u := range users { if u.ID == req.ID { users[i].Name = req.Name users[i].Email = req.Email return &users[i], nil } } return nil, httperrors.ErrNotFound })
// 删除用户 r.DELETE("/users/:id", func(_ *fox.Context, req *UserParams) error { for i, u := range users { if u.ID == req.ID { users = append(users[:i], users[i+1:]...) return nil } } return httperrors.ErrNotFound })
r.Run(":8080")}package main
import ( "time" "github.com/fox-gonic/fox")
func TimingMiddleware() func(*fox.Context) { return func(c *fox.Context) { start := time.Now()
c.Next()
latency := time.Since(start) c.Logger.WithField("latency_ms", latency.Milliseconds()).Info("请求完成") }}
func main() { r := fox.Default() r.Use(TimingMiddleware())
r.GET("/api/data", func() map[string]string { time.Sleep(100 * time.Millisecond) // 模拟工作 return map[string]string{ "message": "数据已检索", } })
r.Run(":8080")}