package main import ( "net/http" "sync" "github.com/gin-gonic/gin" ) type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` } var ( users = []User{ {ID: 1, Name: "Alice", Email: "alice@example.com"}, {ID: 2, Name: "Bob", Email: "bob@example.com"}, } nextID = 3 mu sync.Mutex ) func main() { r := gin.Default() // HTML 模板 r.LoadHTMLGlob("templates/*.html") // 静态资源 r.Static("/static", "./static") r.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "index.html", gin.H{ "title": "Gin Web App", "message": "Welcome to Gin with Go", }) }) r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "pong"}) }) r.GET("/users", func(c *gin.Context) { mu.Lock() defer mu.Unlock() c.JSON(http.StatusOK, users) }) r.POST("/users", func(c *gin.Context) { var newUser User if err := c.ShouldBindJSON(&newUser); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } mu.Lock() newUser.ID = nextID nextID++ users = append(users, newUser) mu.Unlock() c.JSON(http.StatusCreated, newUser) }) r.Run(":8080") }