在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。
我在此过程中没有收到任何错误。
对于定义默认值的字段,任何零值(例如 0、''、false)都不会保存到数据库中,您可能需要使用指针类型或 scanner/valuer 来避免这种情况
通过将字段类型更改为 *bool
进行修复:
type Client struct { ⋮ ClientActive *bool `json:"client_active" gorm:"default:true"` ⋮ }
以上是Golang 布尔值未在 PATCH 上检测到的详细内容。更多信息请关注PHP中文网其他相关文章!