关于 Golang Go语言中 布尔默认值问题

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

关于 Golang Go语言中 布尔默认值问题

假如有如下结构体(同时也对应数据库里的一张表)

type Form struct {
  ID int `json:"id"`
  IsOk bool `json:"is_ok"`
  // 一些其他字段
}

假如我现在要修改这个 Form 的某些值,前端在做逻辑的时候只会向后端提交有修改的值

因为 go bool 默认是 false ,当IsOk=false的时候我怎么知道这个值是前端传上来的还是是它的默认值呢

同理intstring其实也有同样的问题,不过可以用特殊的字符规避掉

大佬们有更换的解决办法吗


更多关于关于 Golang Go语言中 布尔默认值问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

*bool

更多关于关于 Golang Go语言中 布尔默认值问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


要不你考虑考虑*bool


感谢,可行

// UpdateUser defines what information may be provided to modify an existing
// User. All fields are optional so clients can send just the fields they want
// changed. It uses pointer fields so we can differentiate between a field that
// was not provided and a field that was provided as explicitly blank. Normally
// we do not want to use pointers to basic types but we make exceptions around
// marshalling/unmarshalling.
type UpdateUser struct {
Username *string json:"username"
Email *string json:"email" validate:"omitempty,email"
Password *string json:"password"
PasswordConfirm *string json:"passwordConfirm" validate:"omitempty,eqfield=Password"
}

这个是哪里的? 有原文链接没呢

这来自 ardanlab_service repo ,你在 github 里能搜到。强烈建议学习他的整个 repo 里的 pattern

在 Go 语言(Golang)中,布尔类型的默认值是一个经常被讨论的问题,尤其是在初始化变量或者声明变量但未显式赋值时。

Go 语言规范明确规定,未初始化的局部变量(包括布尔类型)在使用前必须被显式赋值,否则会引发编译错误。这是 Go 语言设计中的一个重要特性,旨在避免未定义行为导致的程序错误。因此,严格来说,在 Go 语言中,布尔类型没有所谓的“默认值”,它必须在声明时被初始化,或者在声明后的某个时刻被明确赋值。

对于全局变量或包级变量(即在函数外部声明的变量),如果它们未被显式初始化,Go 会自动为它们赋予零值。对于布尔类型,零值即为 false。这意味着,如果你声明了一个全局布尔变量但没有给它赋值,它将默认为 false

示例代码:

package main

import "fmt"

var globalBool bool // 全局布尔变量,默认为 false

func main() {
    var localBool bool // 局部变量,未初始化则无法使用
    // localBool = true // 必须显式初始化
    fmt.Println(globalBool) // 输出 false
    // fmt.Println(localBool) // 如果取消注释,将引发编译错误
}

总之,在 Go 语言中,布尔类型的变量必须在使用前被显式初始化,全局变量则会被赋予 false 作为零值。这一设计有助于编写更加健壮和可预测的程序。

回到顶部