go xorm存库处理null值问题
作者:Q_X_Q 慶
go xorm存库处理null值
go 的结构有默认值, 这样从数据库获取的时候, null 值会被解析成 0 , 而0 在系统是一个有效值。
Go 的结构体不直接支持整数类型的 NULL 值。
Go 是一种静态类型语言,结构体的字段类型在编译时必须确定。
整数类型(如 int、int64 等)是非指针类型,不能直接存储 NULL 值。
然而,你可以使用指针类型来模拟整数类型的 NULL 值。
通过将整数字段定义为指针类型,可以将其设置为指向整数值或者为 nil(NULL)。
示例
func main() { db, err := NewDBCnn() if err != nil { fmt.Println(err.Error()) return } var a int = 13 b1 := &ModelUser{ Id: 431, Name: "测试新增2", Age: &a, Passwd: nil, Created: "", Updated: "", } db.Insert(b1) bean := new(ModelUser) rows, err := db.Rows(bean) if err != nil { fmt.Println(err.Error()) } defer rows.Close() var ret = make(map[int64]ModelUser) for rows.Next() { bean = new(ModelUser) rows.Scan(bean) ret[bean.Id] = *bean } for _, v := range ret { fmt.Println(fmt.Sprintf("%v", v)) } test, _ := json.Marshal(ret) fmt.Println(string(test)) } // NewDBCnn 新建数据库连接 func NewDBCnn() (*xorm.Engine, error) { engine, err := xorm.NewEngine("mysql", "root:localsense@tcp(127.0.0.1:3306)/test?charset=utf8") if err != nil { // 处理连接错误 } return engine, err } type ModelUser struct { Id int64 `xorm:"id" json:"id"` Name string `xorm:"name" json:"name"` Salt *string `xorm:"salt" json:"salt"` Age *int `xorm:"age" json:"age"` Passwd *int `xorm:"passwd" json:"passwd,omitempty"` Created string `xorm:"created" json:"created,omitempty"` Updated string `xorm:"updated" json:"updated,omitempty"` } func (e ModelUser) TableName() string { return "user" }
数据库中的值
程序运行一下
C:\Users\Josslynn\AppData\Local\Temp\GoLand\___1go_build_main_go__2_.exe
{1 dj 0xc000061fa0 0xc00001f070 0xc00001f088 2023-03-03 10:31:34 2023-03-03 10:31:34}
{3 <nil> <nil> <nil> }
{43 测试新增 <nil> <nil> <nil> 2023-05-23 15:02:12 2023-05-23 15:02:12}
{431 测试新增2 <nil> 0xc00001f130 <nil> 2023-05-23 15:19:17 2023-05-23 15:19:17}
{"1":{"id":1,"name":"dj","salt":"salt","age":18,"passwd":12345,"created":"2023-03-03 10:31:34","updated":"2023-03-03 10:31:34"},"3":{"id":3,"name":"","salt":null,"age":null},"43":{"id":43,"name":"测试","salt":null,"age":null,"created":"2023-05-23 15:02:12","updated":"2023-05-23 15:02:12"},"431":{"id":431,"name":"测试新增2","salt":null,"age":13,"created":"2023-05-23 15:19:17","updated":"2023-05-23 9:17"}}
指针可以读到 数据库的null 值, json 解析的时候 也能 转成null 值。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。