当前位置:网站首页>Go zero framework database avoidance Guide

Go zero framework database avoidance Guide

2022-04-23 20:24:00 Deng_ Xian_ Sheng

Let's start with a problem that doesn't seem to be a problem ,zero The package that should be imported may be missing from the source code generated by the framework or given in the document
If you use goland Will automatically import ; But if it is vscode Or other editors need to pay attention to this problem

————————————————————————————————————————-——
Let's go on zero Framework database related
zero It's generating insert、update These two fields are excluded by default when coding

create_time
update_time

 Insert picture description here
however , barring delete_time; Read through the generated code and you will find ;insert In the code delete_time As a necessary parameter, it is embedded in the code ; If this field is not filled in the structure of the parameter transfer ; May get Incorrect datetime value: '0000-00-00' for column 'delete_time' at row1
therefore , You need to exclude this field , Or write it yourself insert Code

# Exclude this field 
userRowsExpectAutoSet   = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), ",")

Another question

For special fields , Note that null problem

#delete_time The field should be allowed to be null, And the default for 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,

If sql Field constraints 、 Incorrect type ; This may happen to the generated code

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

It should have been

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

If you need to modify the fields of a table later , Generated CURD In addition to the structure of the table ;CURD The function also needs to be modified ; Otherwise, there will be some problems .( because CURD The function of is highly coupled to the structure of the table )

In general zero The point is still rpc, send rpc Better to use ; It's simpler .
For the encapsulation of database, the general situation is , Don't over rely .

版权声明
本文为[Deng_ Xian_ Sheng]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204232018198102.html