1. 控制器(Controller):
控制器负责处理HTTP请求,通常封装了业务逻辑的调用。示例代码如下:
package controller
import (
"github.com/gogf/gf/net/ghttp"
"your_project/app/service"
)
type UserController struct{}
var UserControllerInstance = new(UserController)
// 注册路由
func init() {
ghttp.Get("/user/info", UserControllerInstance.GetUserInfo)
}
// 处理HTTP请求
func (c *UserController) GetUserInfo(r *ghttp.Request) {
userId := r.GetInt("user_id")
userInfo := service.UserServiceInstance.GetUserInfo(userId)
r.Response.WriteJson(userInfo)
}
2. 服务(Service):
服务层封装了业务逻辑,与控制器分离,便于复用和测试。示例代码如下:
package service
import (
"your_project/app/model"
)
type UserService struct{}
var UserServiceInstance = new(UserService)
// 获取用户信息
func (s *UserService) GetUserInfo(userId int) *model.User {
// 业务逻辑处理...
// 调用模型层获取数据
userInfo := model.UserModelInstance.GetUserInfo(userId)
return userInfo
}
3. 模型(Model):
模型层负责与数据存储进行交互,通常封装了数据库操作。示例代码如下:
package model
type UserModel struct{}
var UserModelInstance = new(UserModel)
// 获取用户信息
func (m *UserModel) GetUserInfo(userId int) *User {
// 数据库操作...
// 示例中假设有一个User结构体表示用户信息
user := &User{
UserID: userId,
UserName: "John Doe",
// 其他字段...
}
return user
}
在这个设计中,控制器、服务、模型都被封装成结构体,并使用单例模式(通过var xxxInstance = new(Xxx))确保全局唯一的实例。这样可以方便地在整个应用中共享状态,同时保持对象的单一职责。
需要注意的是,这只是一个基本的示例,实际项目中可能需要更复杂的业务逻辑和数据操作。根据具体需求,你可能需要进一步封装对象、引入接口、使用依赖注入等技术。
转载请注明出处:http://www.zyzy.cn/article/detail/7501/GoFrame