GoFrame项目创建与Cli工具创建
- 1.项目创建
- 2.Mysql数据库配置
- 3.Cli工具dao自动生成
- 4.业务模型须知
- 5.Cli工具service/logic自动生成 - 接口
- 6.Controller/Api创建
1.项目创建
官网 - 项目创建-init
开发文档 - 目录介绍
官网 - 示例项目
1.gf init 项目名 (创建项目,项目最外层文件还没有创建时)
2.gf init . (创建项目,项目最外层文件 已创建 )
3.go get -u github.com/gogf/gf/v2 (项目根目录下更新升级框架版本)
2.Mysql数据库配置
ORM使用配置
1.main.go 添加依赖
import (
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
)
2.config.yaml 配置文件
//link : 类型:账号:密码@协议(地址)/数据库名称?特性配置
database:
logger:
level: "all"
stdout: true
default:
link: "mysql:root:root@tcp(127.0.0.1:3306)/test"
debug: true
3.Cli工具dao自动生成
数据规范-gen dao
1.创建配置 hack/config.yaml
# GoFrame CLI tool configuration.
#gfcli:
# gen:
# dao:
# - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
# tables: "user"
# removePrefix: "gf_"
# descriptionTag: true
# noModelComment: true
#gfcli:
# gen:
# dao:
# - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
# tables: "order,products"
# jsonCase: "CamelLower"
#
# - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/primary"
# path: "./my-app"
# prefix: "primary_"
# tables: "user, userDetail"
#
# # sqlite需要自行编译带sqlite驱动的gf,下载库代码后修改路径文件(gf\cmd\gf\internal\cmd\cmd_gen_dao.go)的import包,取消注释即可。sqlite驱动依赖了gcc
# - link: "sqlite:./file.db"
gfcli:
gen:
dao:
- link: "mysql:root:root@tcp(127.0.0.1:3306)/test-all"
tables: "user"
descriptionTag: true
noModelComment: true
2.执行命令
gf gen dao
//命令会生成 几个文件
// /internal/dao 数据操作对象 - 可扩展修改,但是往往没这种必要
// /internal/model/do 数据转换模型 - 工具维护,用户不能修改。
// /internal/model/entity 数据模型 - 用户不能修改。工具每次生成代码文件将会覆盖该目录
dao: 操作采用规范化设计,必须传递 ctx 参数,并在生成的代码中必须通过 Ctx 或者 Transaction 方法创建对象来 链式 操作数据表。
操作数据表即是通过DAO对象以及相关操作方法实现
4.业务模型须知
数据模型 与 业务模型
model中的模型分为两类:数据模型和业务模型。
数据模型:cli工具生成的 model/entity , 一般不应该修改,数据模型只有在数据表结构变更时通过CLI工具自动更新。数据模型由CLI工具生成及统一维护。
业务模型:业务模型即是与业务相关的数据结构,按需定义,就是service里面需要的结构体,放到model文件夹下,根据业务自定义维护
业务模型
业务模型主要包含两类:接口输入/输出模型 与 业务输入/输出模型,由model模型层统一管理。
1.接口输入/输出模型,通常api调用,以XxxReq和XxxRes格式命名
2.业务输入/输出模型,以XxxInput和XxxOutput格式命名。
5.Cli工具service/logic自动生成 - 接口
- internal/service包 维护
- internal/service 可以由开发者自定义维护接口
接口维护-gen service
1.导入配置文件 watchers.xml ( 从接口接口维护 - gen service 下载 )
2.编写logic文件夹下逻辑代码
【以logic目录为例,gf gen service只会解析logic/xxx/*.go文件。因此,需要logic层代码结构满足一定规范。】
3.执行 gf gen service
【生成 service文件夹下文件 和 logic/logic.go文件(接口注册文件)】
4.服务实现注入 (仅一次)
func init() {
service.RegisterXXX(New())
}
5.在启动文件main.go中引用接口实现注册(仅一次)
- 命令”gf gen service“ 会生成/login/logic.go文件
- 然后在main.go导入,该文件的引入需要在main包的最顶部引入,需要注意import的顺序,放到最顶部,后面加一个空行。如果同时存在packed包的引入,那么放到packed包后面。
如下
import (
_ "demo/internal/logic"
)
6.Controller/Api创建
关于goframe2.0规范路由——请求结构体与响应结构体
接口文档-OpenAPIv3
// 1. Controller
// 注册
func (c *cUser) SignUp(ctx context.Context, req *v1.UserSignUpReq) (res *v1.UserSignUpRes, err error) {
err = service.User().Create(ctx, model.UserCreateInput{
Passport: req.Passport,
Password: req.Password,
Nickname: req.Nickname,
})
return
}
// 2. api
// meta path:"/user/sign-up" 可以不标识
type UserSignUpReq struct {
g.Meta `path:"/user/sign-up" method:"post" tags:"UserService" summary:"用户注册"`
Passport string `v:"required|length:6,16"`
Password string `v:"required|length:6,16"`
Password2 string `v:"required|length:6,16|same:Password"`
Nickname string
}
type UserSignUpRes struct{}
// 3.接口访问路径
http://127.0.0.1:8001/user/sign-up
//-------------------------------
// 1 controller 编写接口
// 2 api 编写 xxRes xxReq