在Golang编程中,布尔值未在PATCH上检测到的问题是一个常见的错误。这个错误可能导致程序无法正常运行或产生意外的结果。php小编百草在本文中将介绍这个问题的原因和解决方法,帮助读者快速解决这个烦恼。无论您是初学者还是有经验的开发者,本文都将为您提供有用的指导和建议,让您的Golang代码更加健壮和可靠。
问题内容
我正在尝试指示客户端是否处于活动状态的应用程序。
如果我手动将 clientactive 布尔值设置为 false,我可以成功将其转换为 true。但如果为 true,则不会设置为 false。
我正在使用 gofiber 和 gorm
模型/client.go
type client struct {
gorm.model
slug string `json:"slug" gorm:"unique"`
clientname string `json:"client_name"`
address string `json:"address,omitempty"`
address2 string `json:"address_2,omitempty" gorm:"null"`
phone string `json:"phone" gorm:"null"`
primaryemail string `json:"primary_email" gorm:"null"`
secondaryemail string `json:"secondary_email" gorm:"null"`
clientactive bool `json:"client_active" gorm:"default:true"`
contacts []contact
devices []device
}
登录后复制
处理程序/clienthandler.go
func ClientUpdate(c *fiber.Ctx) error {
slug := c.Params("slug")
var data models.Client
err := c.BodyParser(&data)
if err != nil {
return err
}
// todo: the ClientActive variable will set as true, but never false
client := &models.Client{
ClientName: data.ClientName,
Address: data.Address,
Address2: data.Address2,
Phone: data.Phone,
PrimaryEmail: data.PrimaryEmail,
SecondaryEmail: data.SecondaryEmail,
ClientActive: data.ClientActive,
}
err = database.DB.Model(&data).Where("slug = ?", slug).Updates(&client).Error
if err != nil {
return err
}
return c.JSON(client)
}
登录后复制
所有其他行更新都没有问题。唯一的问题是 clientactive 布尔值。
完整代码可在 https://github.com/simpleittools/assetapi 获取
我已确认数据是以布尔值形式发送的。我在数据库输入之前和之后都运行了 fmt.prtintln(client),它确实正确显示为 false。
我在此过程中没有收到任何错误。
解决方法
gorm 默认值文档说:
对于定义默认值的字段,任何零值(例如 0、''、false)都不会保存到数据库中,您可能需要使用指针类型或 scanner/valuer 来避免这种情况
通过将字段类型更改为 *bool
进行修复:
type Client struct {
⋮
ClientActive *bool `json:"client_active" gorm:"default:true"`
⋮
}
登录后复制
以上就是Golang 布尔值未在 PATCH 上检测到的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!