$ gf gen -h
USAGE
gf gen COMMAND [OPTION]
COMMAND
dao automatically generate go files for dao/do/entity
pb parse proto files and generate protobuf go files
pbentity generate entity message files in protobuf3 format
service parse struct and associated functions from packages to generate service go file
DESCRIPTION
The "gen" command is designed for multiple generating purposes.
It's currently supporting generating go files for ORM models, protobuf and protobuf entity files.
Please use "gf gen dao -h" for specified type help.
24 Comments
苏杰
用
gf gen dao
生成代码的时候,遇到int64
类型能否指定json
转换的时候转化为字符串?每次都要修改这个,要不然js
里面读取的时候精度不够,好麻烦。郭强
如果有定制化的需求,你可以给对应的结构体实现
MarshalJSON() ([]byte, error)
接口即可,例如:tigerOoo
model的这个设计方便统一管理对象
但外层文件统一一层目录这个设计极容易造成类型名冲突
自定义的数据结构都放在一层文件夹,也不方便进行版本控制。
但这层文件还不能删除,因为Dao层还需要引用。
建议Dao层直接引用mobel的internal内部暴漏的公共对象
model外层文件可以根据需要自行组织结构
现在的外层是食之无味,弃之有肉。
郭强
1、
model
中的internal
用于工具自动化生成的数据模型存储,由工具来维护,多次生成会覆盖的,开发者不能修改。2、
model
外层目录采用的同一个包来管理模型,而不是内部再分成多个包,其实想要解决的是之前gen model
存在的痛点:api/service/dao
中可能都会存在同样一个包名叫做user
,引用时容易混淆,降低开发维护效率。api/service/dao
的输入输出参数),多个包的话复用比较困难,造成代码冗余,不好维护。3、在不同的代码分层中,可以依靠不同的命名规范来区别不同业务的资源,不同的业务资源也可以在同一个包/目录下使用不同的文件来进行管理。
zmsky
没有办法设置某个字段不输出json吗?
郭强
当然可以的,参考下:对象封装设计(更新中)
杨延庆
sqlite 的自增 ID,使用 dao.Info.Insert() 的时候,id 也会被带进去,始终是0,sqlite 会报错,请问有解决方案吗?
刘欣
生成一个新的struct,不要id字段
世强同学
刚接触2天gf,在学习gf-demos,发现新工具生成的dao内容和demos里的不一样。
GoFrame CLI Tool v1.17.0, https://goframe.org
GoFrame Version: v1.16.5 in current go.mod
CLI Installed At: H:\go\path\bin\gf.exe
CLI Built Detail:
Go Version: go1.15.14
GF Version: v1.16.4
Git Commit: 971ed46f0b9d4dfebd1907cd3ed851cf9e1a5503
Build Time: 2021-08-10 02:22:48
在serveice/user.go中抄了一段类似的代码报错了
```
// 用户邮箱加密码登录,成功返回用户信息,否则返回nil; password应当会md5值字符串
func (s *userinfoService) SignIn(ctx context.Context, email, password string) error {
var user *model.UserInfo
err := dao.UserInfo.Where("email=? and password=?", email, password).Scan(&user)
if err != nil {
return err
}
if user == nil {
return errors.New("账号或密码错误")
}
if err := Session.SetUser(ctx, user); err != nil {
return err
}
Context.SetUser(ctx, &model.ContextUser{
Uid: uint(user.Uid),
Wxamp: user.Wxamp,
Username: user.Username,
})
return nil
}
```
世强同学
好像是
err := dao.UserInfo.Ctx(ctx).Where("email=? and password=?", email, password).Scan(&user)
朱淑祺
func (dao *ProductLabelDao) Transaction(ctx context.Context, f func(ctx context.Context, tx *gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}
Transaction 提示没有这个方法,不知道是怎么回事。自动生成的代码。是什么原因呀。
alfred
感谢,对于水平切分的数据库,如果只生成同一个group的dao层,只能在业务上来修改配置获取db对象,只是默认dao层保存的group就没什么用了,请问是否有更好的设计方案,初次接触,请指教
JunJun
zhaosy
郭老师,您好,工具很好用,给一个大大赞;有一个小小的建议生成文件时 能不能给一个创建时间呀?主要是后期看更新的时间是什么时候,方便后期回滚之类的
郭强
可以提个PR
海亮
https://github.com/gogf/gf-cli/pull/141
提了
qingtian009
cgo 也弄了,编译也成功了,就是不能gf gen dao一直不能用
cannot find database driver for specified database type "sqlite", did you misspell type name "sqlite" or forget importing the database driver?
1. cannot find database driver for specified database type "sqlite", did you misspell type name "sqlite" or forget importing the database driver?
建议把sqlite完善下,毕竟这个用的也很多
推荐给你一个不用cgo的sqlite库:
github.com/glebarez/sqlite
郭强
这个底层使用的也是
github.com/mattn/go-sqlite3
库,也是需要CGO的。海亮
还以为是真的,结果套娃
github.com/glebarez/sqlite=>github.com/glebarez/go-sqlite=>modernc.org/sqlite(gitlab.com/cznic/sqlite)=>github.com/mattn/go-sqlite3
海亮
可能是一个误会,有空在仔细看看
海亮
这个库的确不依赖CGO
peirenlei
我这边也是跟你一样的,sqllite用不了,不知道你解决了没有
qingtian009
你把这个sqlite加上,同时再搞一个简单图片处理的库上去,水印翻转,验证码之类的
haima1004
linux系统:
执行gf gen service生成报错
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ gf version
GoFrame CLI Tool v2.1.0-rc4, https://goframe.org
GoFrame Version: cannot find goframe requirement in go.mod
CLI Installed At: /usr/local/bin/gf
CLI Built Detail:
Go Version: go1.17.10
GF Version: v2.1.0-rc4
Git Commit: 2022-06-01 16:36:40 0639becccc486fda179b81e7a685f67c91b173a4
Build Time: 2022-06-01 16:34:52
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ gf gen service
source folder path "internal/logic" does not exist
手动新建internal/logic后,再次执行不生成文件
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ gf gen service
done!
haima@haima-PC:/media/haima/34E401CC64DD0E282/site/go/src/gfoframe/df-web-demo1/myapp$ ll internal/logic/
总用量 0