Go-zero开发框架记录|青训营笔记

438 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。本小组的项目采用go-zero进行开发,该框架能够简介高效低完成接口定义、逻辑开发和部分代码生成。使用 goctl 可显著提升开发效率,让开发人员将时间重点放在业务开发上。

goctl 的命令可归纳为如下几类:

  • API 命令,快速生成一个 API 服务
  • rpc 命令,支持 proto 模板生成和 rpc 服务代码生成
  • model 命令,目前支持识别 mysql ddl 进行 model 层代码生成
  • plugin 命令,支持针对 API 自定义插件
  • 其他命令,目前是发布相关

image.png

首先我们根据接口定义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为数据库底层操作层。

参考:go-zero框架简介与基本使用 - 知乎 (zhihu.com)

go-zero:微服务框架_又拍云 UPYUN的博客-CSDN博客_go zero