本文已参与「新人创作礼」活动, 一同开启创作之路。

睡之前;仍是先写一写一篇技术文章。昨天咱们才刚刚把初模版搭建好。接下来便是装备yaml文件;注册服务等等。直接开端吧!

打开咱们的装备文件:在项目下:etc/user-api.yaml

时长一周的golang萌新学习go-zero --- 进度二

这儿面的装备文件很重要后面;一些的重要的装备文件都会写在里边,记住上传git的时候把这玩意装备成不提交的文件。 接下来便是开端咱们的骚操作,填写好了后开端 根据go-zero供给的模版一键生成的curd的代码,这个是基于sqlx的。前几天我看到一个大佬把这个模版改为基于gorm的;但是要改goctl的模版文件哦;我新兵蛋子不会改,先学学最原始的吧。

开端扮演骚操作
  1. 老规矩把终端命令切换到 go-zero-demo目录下;创立一个model目录。
  2. $ goctl model mysql ddl -src="https://juejin.im/post/*.sql" -dir="./sql/model" -c这是官方大大的给的比如。咱们来实操吧
  3. goctl model mysql datasource -url="数据库名:密码@tcp(IP地址:端口)/数据库名" -table="数据表" -dir="生成目录下" -cache=true --style=goZero
  4. 这儿的生成目录:./model 会生成几个文件;生成好了咱们查看一遍没有问题直接拖进去user-api目录下。
  5. 我这脸不想去生成;麻烦我的数据库是线上的不想玩本地,懒的去弄;有问题可以在评论区留言;咱们来 battery。
  6. 好了扮演结束;开端了咱们的无聊的写代码时刻了。
的写代码时刻到了

现在咱们的curd的根本操作现已主动生成了;来咱们开端调试。。。

  1. 首先先去etc/user-api.yaml装备文件中数据库加载进 internal/config/config.go中去。
  2. User的数据表模型加载项目中;(这儿加载svc中;这玩意很重要。很多中间件都会从这儿加载进去)
  3. 最终一步便是开端咱们调用 CURD的办法了。然后高兴就这么没了。

来来一步步来。

package config
import "github.com/zeromicro/go-zero/rest"
type Config struct {
   rest.RestConf
   Auth struct {
      AccessSecret string
      AccessExpire int64
   }
   DB struct {
      DataSource string
   }    // 这儿便是在 yaml 文件写的数据库装备。我这边仅仅写了一个很简单的装备。复杂的装备;可以直接去追寻svc创立连接时 看源码,可选参数的。
}

然后便是在 svc的装备。

package svc
import (
   "github.com/zeromicro/go-zero/core/stores/sqlx"
   "user-api/internal/config"
)
type ServiceContext struct {
   Config    config.Config
   UserModel model.UserModel // 我这边还没有生成出来;所以报错的
}
func NewServiceContext(c config.Config) *ServiceContext {
   return &ServiceContext{
      Config:    c,
      UserModel: model(NewUserModel(sqlx.NewMysql(c.DB.DataSource))), // 我这边还没有生成出来;所以报错的
   }
}
// 留意 model的包引证啊;我这边没有生成

最终一步;便是开端在 hanler去调用放curd的办法了。或许萌新找不到 对应的接口handler不知道是哪一个;很简单直接在路由文件 去追寻办法快速找到(开发仍是用Goland东西;一个后端仔好用程度决定工作效率)。 关于经过路由追寻办法:这儿要跳2次;第一次跳到是注册的hanlder的目录下;这儿不是写事务当地;这是goctl的主动生成的文件(这儿具体是干什么我还没有研讨;我估计是查验参数是否必选传递那些;) 真实的事务代码是在logic目录;goctl很交心在咱们要写事务当地用TDO 标识了

package user
import (
   "context"
   "user-api/internal/svc"
   "user-api/internal/types"
   "github.com/zeromicro/go-zero/core/logx"
)
type DetailLogic struct {
   logx.Logger
   ctx    context.Context
   svcCtx *svc.ServiceContext
}
func NewDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DetailLogic {
   return &DetailLogic{
      Logger: logx.WithContext(ctx),
      ctx:    ctx,
      svcCtx: svcCtx,
   }
}
func (l *DetailLogic) Detail(req *types.DetailReq) (resp *types.DetailRep, err error) {
   // todo: add your logic here and delete this line
   user, err := l.svcCtx.UserModel.FindOne(req.Id)
   if err != nil {
      return nil, err
   }
   if user == nil {
      return nil, err
   }
   // 返回数据;
   return
}

没了,下期间;我要睡了—–早睡早起。溜了溜了