首頁  >  文章  >  後端開發  >  Golang 布林值未在 PATCH 上偵測到

Golang 布林值未在 PATCH 上偵測到

王林
王林轉載
2024-02-12 20:00:10938瀏覽

Golang 布尔值未在 PATCH 上检测到

在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 上偵測到的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除