当前位置:网站首页>go-zero框架数据库方面避坑指南

go-zero框架数据库方面避坑指南

2022-04-23 20:18:00 Deng_Xian_Sheng

先说一个貌似不是问题的问题,zero框架生成的或者文档给出的源码中可能会缺少应该导入的包
如果你使用goland会自动导入;但如果是vscode或者其他编辑器需要注意这个问题

————————————————————————————————————————-——
下面接着扯zero框架数据库相关
zero在生成insert、update代码时默认排除这两个字段

create_time
update_time

在这里插入图片描述
但是,不包括delete_time;通读生成后的代码你就会发现;insert代码中delete_time作为一个必要的参数被嵌入在代码中;如果在传参的结构体中不填该字段;可能会得到Incorrect datetime value: '0000-00-00' for column 'delete_time' at row1
所以,需要排除这个字段,或者自己写insert代码

#排除该字段
userRowsExpectAutoSet   = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), ",")

另一个问题

对于特殊字段,要注意为null问题

#delete_time字段要允许为null,且默认为null
`delete_time` timestamp(3) NULL DEFAULT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

如果sql字段约束、类型不正确;生成的代码可能会有这种情况

DeleteTime    time.Time      `db:"deleted_at"`
CreateTime    time.Time      `db:"created_time"`
UpdateTime    time.Time      `db:"updated_time"`

它本应为

DeleteTime    sql.NullTime   `db:"deleted_at"`
CreateTime    time.Time      `db:"created_time"`
UpdateTime    time.Time      `db:"updated_time"`

如果后期需要修改某表的字段,生成的CURD代码中除了表的结构体;CURD的函数也需要修改;否则会出现一些问题。(因为CURD的函数对表的结构体耦合性比较高)

总体来讲zero重点还是在rpc,使rpc更好用;更简单。
对于数据库的封装一般情况,不要过度依赖。

版权声明
本文为[Deng_Xian_Sheng]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Deng_Xian_Sheng/article/details/123215405

随机推荐