简单的用户信息管理 RESTFul API
路由
GET : http://127.0.0.1:8080/user
POST : http://127.0.0.1:8080/user/create
GET : http://127.0.0.1:8080/user/list
GET : http://127.0.0.1:8080/user/update/:id
PUT : http://127.0.0.1:8080/user/find/:id
DELETE : http://127.0.0.1:8080/user/1
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type User struct {
Id int `gorm:"AUTO_INCREMENT"` // 自增
Name string `gorm:"size:255"` // string默认长度为255, 使用这种tag重设
Age int
}
var (
db *gorm.DB
err error
)
func main() {
// 链接 mysql
db, err = gorm.Open("mysql", "root:ts123456@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic(err)
} else {
// 全局禁用表名复数
db.SingularTable(true) // 如果设置为true,`User`的默认表名为`user`,使用`TableName`设置的表名不受影响
// 一般不会直接用CreateTable创建表
// 检查模型`User`表是否存在,否则为模型`User`创建表
if !db.HasTable(&User{}) {
if err := db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}).Error; err !=nil {
panic(err)
}
}
}
// 引入路由
Router()
}
func Router() {
router := gin.Default()
// 路径映射
router.GET("/user", InitPage)
router.POST("/user/create", CreateUser)
router.GET("/user/list", ListUser)
router.PUT("/user/update/:id", UpdateUser)
router.GET("/user/find/:id", GetUser)
router.DELETE("/user/:id", DeleteUser)
router.Run(":8080")
}
//每个路由都对应一个具体的函数操作,从而实现了对user的增,删,改,查操作
func InitPage(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "OK!",
})
}
// 创建用户
// curl -i -X POST -H "Content-Type: application/json" -d "{ \"name\": \"Vic\", \"age\": 20}" http://localhost:8080/user/create
func CreateUser(c *gin.Context) {
var user User
c.BindJSON(&user) // 使用bindJson填充数据
// db.Create(&user) // 创建对象
// c.JSON(http.StatusOK, &user) // 返回页面
if user.Name != "" && user.Age > 0 {
db.Create(&user)
c.JSON(http.StatusOK, gin.H{"success": &user})
} else {
c.JSON(422, gin.H{"error": "Fields are empty"})
}
}
// 更新用户
// curl -i -X PUT -H "Content-Type: application/json" -d "{ \"name\": \"Vc\", \"age\": 9}" http://localhost:8080/user/update/9
func UpdateUser(c *gin.Context) {
var user User
id := c.Params.ByName("id")
err := db.First(&user, id).Error
if err != nil {
c.AbortWithStatus(404)
fmt.Println(err.Error())
} else {
c.BindJSON(&user)
db.Save(&user) // 提交修改
c.JSON(http.StatusOK, &user) // 返回页面
}
}
// 列出所有用户
// http://127.0.0.1:8080/user/list
// curl -i http://localhost:8080/user/list
func ListUser(c *gin.Context) {
var user []User
db.Find(&user)
c.JSON(http.StatusOK, &user) //限制查找前line行
}
// 列出单个用户
// curl -i http://localhost:8080/user/find/18
func GetUser(c *gin.Context) {
var user User
id := c.Params.ByName("id")
err := db.First(&user, id).Error
if err != nil {
c.AbortWithStatus(404)
fmt.Println(err.Error())
} else {
c.JSON(http.StatusOK, &user)
}
}
// 删除用户
// curl -i -X DELETE http://localhost:8080/user/1
func DeleteUser(c *gin.Context) {
var user User
id := c.Params.ByName("id")
db.First(&user, id)
if user.Id != 0 {
db.Delete(&user)
c.JSON(http.StatusOK, gin.H{
"success": "User# " + id + " deleted!",
})
} else{
c.JSON(404, gin.H{
"error": "User not found",
})
}
}