go xorm存库处理null值问题

 更新时间:2023年12月28日 10:12:16   作者:Q_X_Q 慶  
这篇文章主要介绍了go xorm存库处理null值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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 值。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • go time.After优化后性能提升34%内存减少67%

    go time.After优化后性能提升34%内存减少67%

    这篇文章主要介绍了go语言time.After优化后性能提升34%内存减少67%实例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • ubuntu安装golang并设置goproxy的方法步骤

    ubuntu安装golang并设置goproxy的方法步骤

    在Ubuntu系统上安装Go语言(Golang)有多种方法,包括使用包管理器、从源代码编译安装以及使用版本管理工具如gvm,安装完成后,为了方便管理Go语言项目依赖,需要设置GOPATH环境变量并配置Go代理,本文介绍ubuntu安装golang并设置goproxy的方法,感兴趣的朋友一起看看吧
    2024-10-10
  • Go 一般方法与接口方法接收者的差异详解

    Go 一般方法与接口方法接收者的差异详解

    这篇文章主要为大家介绍了Go 一般方法与接口方法接收者的差异详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 用go语言实现WebAssembly数据加密的示例讲解

    用go语言实现WebAssembly数据加密的示例讲解

    在Web开发中,有时候为了提升安全性需要对数据进行加密,由于js代码相对比较易读,直接在js中做加密安全性较低,而WebAssembly代码不如js易读,本文提供一个用go语言实现的WebAssembly数据加密示例,需要的朋友可以参考下
    2024-03-03
  • 解决Golang小数float64在实际工程中加减乘除的精度问题

    解决Golang小数float64在实际工程中加减乘除的精度问题

    这篇文章主要介绍了解决Golang小数float64在实际工程中加减乘除的精度问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • go redis之redigo的使用

    go redis之redigo的使用

    本文主要介绍了go redis之redigo的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 一文详解Go语言io包中的discard类型

    一文详解Go语言io包中的discard类型

    这篇文章主要介绍了Go语言io包中的discard类型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • golang内置net/http包的使用详解

    golang内置net/http包的使用详解

    在Go语言中,内置的net/http包提供了一种出色的方式来处理HTTP请求和响应,不仅功能强大,而且易于使用,本文将带大家深入了解Go语言内置的net/http包,揭示其强大的功能和用法,希望对大家有所帮助
    2023-11-11
  • Go 通过结构struct实现接口interface的问题

    Go 通过结构struct实现接口interface的问题

    这篇文章主要介绍了Go 通过结构struct实现接口interface的问题,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Golang等多种语言转数组成字符串举例详解

    Golang等多种语言转数组成字符串举例详解

    今天写代码遇到数组转换成字符串操作,下面这篇文章主要给大家介绍了关于Golang等多种语言转数组成字符串的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05

最新评论