项目源码
前几章我们做了很多基础的搭建,但是路由只是实现了一个简单的Hello World
,现在我们来实现一个查询接口
封装response
首先封装一个response,新建app/response/response.go
文件:
package response
import (
"github.com/gin-gonic/gin"
"net/http"
)
// Response 定义一个统一的返回值结构体
type Response struct {
ErrorCode int `json:"error_code"`
Data interface{} `json:"data"`
Message string `json:"message"`
}
// Success 成功返回
func Success(c *gin.Context, data interface{}) {
c.JSON(http.StatusOK, Response{
0,
data,
"ok",
})
}
// Error 失败返回
func Error(c *gin.Context, errorCode int, msg string) {
c.JSON(http.StatusOK, Response{
errorCode,
nil,
msg,
})
}
在response包中,定义了一个统一的返回值结构体,并新增Success、Error方法用来处理接口的返回值
封装service
为了处理后续复杂的业务逻辑,我们再封装一个Service层,新建app/service/base_service.go
文件:
package service
import "gorm.io/gorm"
// service基类,其他service都继承它
type baseService struct {
db *gorm.DB
}
新建app/service/admin_service.go
文件:
package service
import "eve/app/model"
type adminService struct {
baseService
}
func (a *adminService) Profile() (model model.Admin) {
a.db.First(&model)
return model
}
新建app/service/init.go
文件:
package service
import (
"eve/internal/global"
)
var (
BaseService = &baseService{db: global.DB}
AdminService = &adminService{baseService: *BaseService}
)
app/service/init.go文件用来实例化service层用到的对象
封装api
新建app/api/admin/admin_api.go
文件:
package admin
import (
"eve/app/response"
"eve/app/service"
"github.com/gin-gonic/gin"
)
type adminApi struct{}
func (a *adminApi) Profile(c *gin.Context) {
admin := service.AdminService.Profile()
response.Success(c, admin)
}
新建app/api/admin/init.go
文件:
package admin
var (
AdminApi = new(adminApi)
)
app/api/admin/init.go文件用来实例化api层用到的对象
注册路由
修改app/route/admin.go
文件:
package route
import (
"eve/app/api/admin"
"github.com/gin-gonic/gin"
)
func genAdminRouter(rg *gin.RouterGroup) {
rg.GET("/profile", admin.AdminApi.Profile)
}
注册完成之后重启项目,访问admin/profile
接口:
➜ ~ curl http://127.0.0.1:8082/admin/profile
{"error_code":0,"data":{"id":1,"name":"管理员","password":"NOEFNIE","created_at":"2024-07-15T15:12:26+08:00","updated_at":"2024-07-15T16:01:08+08:00"},"message":"ok"}
可以看到返回了数据库中第一条记录,我们的第一个查询接口就完成了
总结
- 封装response
- 封装service
- 封装接口
commit-hash: 662b02f