在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中文網其他相關文章!