这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。本小组的项目采用go-zero进行开发,该框架能够简介高效低完成接口定义、逻辑开发和部分代码生成。使用 goctl 可显著提升开发效率,让开发人员将时间重点放在业务开发上。
goctl 的命令可归纳为如下几类:
- API 命令,快速生成一个 API 服务
- rpc 命令,支持 proto 模板生成和 rpc 服务代码生成
- model 命令,目前支持识别 mysql ddl 进行 model 层代码生成
- plugin 命令,支持针对 API 自定义插件
- 其他命令,目前是发布相关
首先我们根据接口定义api文件,例如:
type (
User {
Id int64 `json:"id"`
Name string `json:"name"`
Follow_count int64 `json:"follow_count,optional"`
Follower_count int64 `json:"follower_count,optional"`
Is_follow bool `json:"is_follow"`
}
}
快速生成api服务
api new greet
cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml
etc文件夹下存放配置文件.yaml,handler存放路由对应的处理函数,types下存放项目中的结构体,在logic中处理服务逻辑。
另外,go-zero也提供了rpc及model生成的服务:
RPC服务生成
通过定义好的proto文件,生成相应的rpc服务
goctl rpc template -o=user.proto
Model服务生成
通过数据库生成相应的model文件
goctl model mysql datasource -url="user:password@tcp(127.0.0.1:3306)/database" -table="*" -dir="./"
type (
userModel interface {
Insert(ctx context.Context, data *User) (sql.Result, error)
FindOne(ctx context.Context, userId int64) (*User, error)
Update(ctx context.Context, data *User) error
Delete(ctx context.Context, userId int64) error
}
defaultUserModel struct {
conn sqlx.SqlConn
table string
}
User struct {
UserId int64 `db:"user_id"`
UserName string `db:"user_name"`
Password string `db:"password"`
FollowCount int64 `db:"follow_count"`
FollowerCount int64 `db:"follower_count"`
}
)
*Model.go为模型接口与结构层,*Model_gen.go为数据库底层操作层。