返回
掌握 Go 中的用户业务逻辑处理
见解分享
2023-12-08 22:23:23
如何使用 Go 完成用户业务逻辑
开发人员:的技术博客创作专家
在上一节中,我们已经大致学习了如何使用 Gin 读写请求。这一节就是实践了,完成一个用户业务逻辑处理。这一节是核心部分,因为这个项目的主要功能就是在这部分实现的。这部分的代码改动很大,毕竟要完成上述的功能会增加很多代码。
首先,来看下路由,router.go 里增加了如下内容:
// userRouter 用户相关路由
func userRouter(e *gin.Engine) {
group := e.Group("/user")
// 获取用户列表
group.GET("", userList)
// 创建用户
group.POST("", createUser)
// 获取单个用户
group.GET("/:id", getUser)
// 更新用户
group.PUT("/:id", updateUser)
// 删除用户
group.DELETE("/:id", deleteUser)
}
接着,来看下控制层代码,user.go 里增加了如下内容:
// userList 获取用户列表
func userList(ctx *gin.Context) {
var users []user.User
db.Find(&users)
resp := response.NewOKResponse("success", users)
response.WriteResponse(ctx, resp)
}
// createUser 创建用户
func createUser(ctx *gin.Context) {
var user user.User
if err := ctx.ShouldBindJSON(&user); err != nil {
resp := response.NewBadRequestResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
if err := db.Create(&user).Error; err != nil {
resp := response.NewInternalServerErrorResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
resp := response.NewOKResponse("success", user)
response.WriteResponse(ctx, resp)
}
// getUser 获取单个用户
func getUser(ctx *gin.Context) {
var user user.User
if err := db.First(&user, ctx.Param("id")).Error; err != nil {
resp := response.NewNotFoundResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
resp := response.NewOKResponse("success", user)
response.WriteResponse(ctx, resp)
}
// updateUser 更新用户
func updateUser(ctx *gin.Context) {
var user user.User
if err := db.First(&user, ctx.Param("id")).Error; err != nil {
resp := response.NewNotFoundResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
if err := ctx.ShouldBindJSON(&user); err != nil {
resp := response.NewBadRequestResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
if err := db.Save(&user).Error; err != nil {
resp := response.NewInternalServerErrorResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
resp := response.NewOKResponse("success", user)
response.WriteResponse(ctx, resp)
}
// deleteUser 删除用户
func deleteUser(ctx *gin.Context) {
var user user.User
if err := db.First(&user, ctx.Param("id")).Error; err != nil {
resp := response.NewNotFoundResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
if err := db.Delete(&user).Error; err != nil {
resp := response.NewInternalServerErrorResponse(err.Error())
response.WriteResponse(ctx, resp)
return
}
resp := response.NewOKResponse("success", nil)
response.WriteResponse(ctx, resp)
}
最后,来看下数据层代码,user.go 里增加了如下内容:
// User 用户模型
type User struct {
ID uint64 `gorm:"primary_key;auto_increment" json:"id"`
Username string `gorm:"size:255;not null;unique" json:"username"`
Password string `gorm:"size:255;not null" json:"password"`
CreatedAt time.Time `gorm:"default:current_timestamp" json:"created_at"`
UpdatedAt time.Time `gorm:"default:current_timestamp" json:"updated_at"`
}
好了,至此,用户业务逻辑处理已经完成了。