Golang Go语言中如何对待零值问题

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中如何对待零值问题

type User struct {
gorm.Model
Name string
Age  *int gorm:"default:18"
}

gorm 中为了保存零值只能这么写

type Req struct {
    Gender  *int     `json:"gender" binding:"exists"`
}

gin 中为了 BindJSON 零值时不出错也只能写成这样,有没有什么解决办法😶


更多关于Golang Go语言中如何对待零值问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

有什么问题?既然数据库是 nullable 类型,go 的类型自然也要是 nullable 的,要么是 *int,要么是 sql.NullInt64

更多关于Golang Go语言中如何对待零值问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


楼上+1,针对 null 值可以用 sql 定义的接收

gin BindJSON 的时候,某个 int 类型的值为 required,但是这时候客户端又要传 0 怎么办?

gorm 设置为 not null 时,int 默认是 0 string 默认是""

In aws sdk, any type is a pointer

所以尽量不要用零值

在Go语言中,零值(Zero Value)是一个非常重要的概念,它指的是变量在声明时未被显式初始化时自动赋予的默认值。Go语言通过精心设计的零值机制,使得开发者在处理未初始化变量时能够避免很多潜在的错误和不确定性。

对于不同类型的变量,零值有所不同:

  • 数值类型(如int、float64等)的零值是0。
  • 布尔类型的零值是false。
  • 字符串(string)的零值是一个空字符串""。
  • 指针、切片(slice)、映射(map)和通道(channel)的零值是nil。
  • 接口(interface)的零值也是nil。

Go语言的零值机制有几个重要的优点:

  1. 安全性:零值避免了未初始化变量导致的未定义行为,减少了程序崩溃的风险。
  2. 简洁性:开发者无需显式初始化所有变量,代码更加简洁。
  3. 一致性:不同类型的变量都有明确的零值,使得程序行为更加一致。

在处理零值时,开发者需要注意以下几点:

  • 在使用指针、切片、映射和通道等引用类型之前,应检查它们是否为nil,以避免空指针引用或运行时错误。
  • 对于数值类型和字符串,可以直接使用零值,因为它们在大多数情况下都是有效的默认值。
  • 对于布尔类型,零值false通常表示某种条件不成立或某个操作未执行。

总之,理解和善用Go语言的零值机制,对于编写健壮、可维护的代码至关重要。

回到顶部