关于 Golang Go语言中 布尔默认值问题
关于 Golang Go语言中 布尔默认值问题
假如有如下结构体(同时也对应数据库里的一张表)
type Form struct {
ID int `json:"id"`
IsOk bool `json:"is_ok"`
// 一些其他字段
}
假如我现在要修改这个 Form 的某些值,前端在做逻辑的时候只会向后端提交有修改的值
因为 go bool 默认是 false ,当IsOk=false
的时候我怎么知道这个值是前端传上来的还是是它的默认值呢
同理int
和string
其实也有同样的问题,不过可以用特殊的字符规避掉
大佬们有更换的解决办法吗
更多关于关于 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
作为零值。这一设计有助于编写更加健壮和可预测的程序。