一. 基础
go-zero内部提供了操作数据库,redis缓存的相关逻辑,可以通过goctl命令针对指定表生成对应的增删改查逻辑,参考博客 , 参考博客 ,参考博客 例如将建表sql放到项目的sql文件夹下 切换到user项目路径下,执行goctl命令
goctl model mysql ddl - src= "./sql/*.sql" - dir= "./model" - style goZero
命令执行完毕后会生成对应数据库操作的文件 也可以给上面的命令增加"-c"表示生成带缓存逻辑的crud
生成代码缓存的代码:
goctl model mysql ddl - src= "./sql/*.sql" - dir= "./model" - c - style goZero
goctl model mysql datasource - url= "root:root@tcp(127.0.0.1:3306)/demo" - table= "t_user" - dir= "./model" - c - style goZero
项目的yaml中增加数据库连接与redis缓存连接配置
Etcd :
Hosts :
- 127.0.0.1: 2379
Key : user.rpc
DB :
DataSource : root: root@tcp(localhost: 3306)/demo? charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
Redis :
Host : localhost: 6379
Type : node
Pass :
Cache :
- Host : localhost: 6379
Pass :
internal/config下config增加DB与Cache属性
type Config struct {
rest. RestConf
zrpc. RpcClientConf
DB struct {
DataSource string
}
Cache cache. CacheConf
}
修改internal/svc/下ServiceContext,增加表model,在业务操作时直接通过指定model进行数据库的增删改查
import (
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/zrpc"
"go_cloud_demo/rpc/types/user"
"go_cloud_demo/rpc/userclient"
"go_cloud_demo/user/internal/config"
"go_cloud_demo/user/model"
)
type ServiceContext struct {
Config config. Config
RpcUser userclient. User
UserAuthResp * user. UserAuthResp
TUserModel model. TUserModel
}
func NewServiceContext ( c config. Config) * ServiceContext {
sqlConn := sqlx. NewMysql ( c. DB. DataSource)
return & ServiceContext{
Config: c,
RpcUser: userclient. NewUser ( zrpc. MustNewClient (
c. RpcClientConf,
) ) ,
TUserModel: model. NewTUserModel ( sqlConn, c. Cache) ,
}
}
logic业务接口中增加数据库相关操作
func ( l * UserLoginLogic) UserLogin ( req * types. UserLoginReq) ( resp * types. UserLoginResp, err error ) {
user, err := l. svcCtx. TUserModel. FindOne ( l. ctx, 11 )
if nil != err {
fmt. Printf ( "====================query user err: %v" , err)
return nil , err
}
logx. Info ( "query user by id user: %v" , user)
return & types. UserLoginResp{
Message: user. UserName. String,
} , nil
}
go-zero 整合 Masterminds/squirrel
go-zero默认提供的sqlx通过goctl可以生成简单的crud操作,如果像使用复杂sql,可以整合Masterminds/squirrel 执行go get命令拉取"github.com/Masterminds/squirrel"
二. go-zero 整合 GORM 实现数据库操作
三. go-zero DB缓存机制
参考博客