go golang sqlx 获取数据库信息时, sql.NullString 类型在返回时只显示对应数据,不显示其它 Valid
阅读本文之前你需要了解的知识:
- 能通过
sqlx
能成功获取数据库数据 - 在定义对应数据库的
struct
时,如果字段是非必填的,struct
中对应的类型就应该是sql.NullString
,而这样通过db.Get()
db.Select()
返回的数据就是sql.NullString
的结构
type NullString struct {
String string
Valid bool // string 不为空时为 true
}
我原本对应数据库的 struct
是这样定义的
type User struct {
Id int `db:"id"`
Name string `db:"name"`
Phone string `db:"phone"`
Password sql.NullString `db:"password"`
WxQr string `db:"wx_qr"`
Desc sql.NullString `db:"desc"`
Homepage sql.NullString `db:"homepage"`
GaodeInvitation sql.NullString `db:"gaode_invitation"`
DateEdit sql.NullString `db:"date_edit"`
DateRegister sql.NullString `db:"date_register"`
Hash string `db:"hash"`
}
获取的数据如下
除去 sql.NullString 的结构,只显示数据
通过查找,总算解决了这个问题
参考:https://stackoverflow.com/questions/53841547/go-optional-fields-with-sqlx
只需要将原本 sql.NullString
类型改为 *string
并在其后添加 json:",omitempty"
即可
type User struct {
Id int `db:"id"`
Name string `db:"name"`
Phone string `db:"phone"`
Password *string `db:"password" json:",omitempty"`
WxQr string `db:"wx_qr"`
Desc *string `db:"desc" json:",omitempty"`
Homepage *string `db:"homepage" json:",omitempty"`
GaodeInvitation *string `db:"gaode_invitation" json:",omitempty"`
DateEdit *string `db:"date_edit" json:",omitempty"`
DateRegister *string `db:"date_register" json:",omitempty"`
Hash string `db:"hash"`
}
修改后获取的数据是这样的: