本文已参与「新人创作礼」活动, 一同开启创作之路。
睡之前;仍是先写一写一篇技术文章。昨天咱们才刚刚把初模版搭建好。接下来便是装备yaml文件;注册服务等等。直接开端吧!
打开咱们的装备文件:在项目下:etc/user-api.yaml
这儿面的装备文件很重要后面;一些的重要的装备文件都会写在里边,记住上传git的时候把这玩意装备成不提交的文件。
接下来便是开端咱们的骚操作,填写好了后开端 根据go-zero
供给的模版一键生成的curd的代码,这个是基于sqlx
的。前几天我看到一个大佬把这个模版改为基于gorm
的;但是要改goctl
的模版文件哦;我新兵蛋子不会改,先学学最原始的吧。
开端扮演骚操作
- 老规矩把终端命令切换到 go-zero-demo目录下;创立一个
model
目录。 -
$ goctl model mysql ddl -src="https://juejin.im/post/*.sql" -dir="./sql/model" -c
这是官方大大的给的比如。咱们来实操吧 goctl model mysql datasource -url="数据库名:密码@tcp(IP地址:端口)/数据库名" -table="数据表" -dir="生成目录下" -cache=true --style=goZero
- 这儿的生成目录:
./model
会生成几个文件;生成好了咱们查看一遍没有问题直接拖进去user-api目录下。 - 我这脸不想去生成;麻烦我的数据库是线上的不想玩本地,懒的去弄;有问题可以在评论区留言;咱们来 battery。
- 好了扮演结束;开端了咱们的无聊的写代码时刻了。
的写代码时刻到了
现在咱们的curd的根本操作现已主动生成了;来咱们开端调试。。。
- 首先先去
etc/user-api.yaml
装备文件中数据库加载进internal/config/config.go
中去。 - 把
User
的数据表模型加载项目中;(这儿加载svc中;这玩意很重要。很多中间件都会从这儿加载进去) - 最终一步便是开端咱们调用
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
}
没了,下期间;我要睡了—–早睡早起。溜了溜了