Dalam pengaturcaraan Golang, isu nilai Boolean yang tidak dikesan pada PATCH adalah kesilapan biasa. Ralat ini boleh menyebabkan program tidak berfungsi dengan betul atau menghasilkan keputusan yang tidak dijangka. Editor PHP Baicao akan memperkenalkan punca dan penyelesaian kepada masalah ini dalam artikel ini untuk membantu pembaca menyelesaikan masalah ini dengan cepat. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberi anda panduan dan nasihat berguna untuk menjadikan kod Golang anda lebih mantap dan boleh dipercayai.
Saya cuba membuat aplikasi yang menunjukkan sama ada pelanggan aktif atau tidak. Jika saya secara manual menetapkan boolean clientactive kepada false, saya boleh berjaya menukarnya kepada benar. Tetapi jika benar, ia tidak akan ditetapkan kepada palsu. Saya menggunakan gofiber dan gorm
model/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 }
pengendali/klienhandler.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) }
Semua baris lain dikemas kini tanpa masalah. Satu-satunya masalah ialah boolean clientactive.
Kod lengkap boleh didapati di https://github.com/simpleittools/assetapi
Saya telah mengesahkan bahawa data sedang dihantar sebagai nilai boolean. Saya menjalankan fmt.println(klien) sebelum dan selepas input pangkalan data dan ia memaparkan palsu dengan betul.
Saya tidak menerima sebarang ralat semasa proses ini.
dokumentasi lalai gorm berkata:
Untuk medan dengan nilai lalai yang ditentukan, sebarang nilai sifar (cth. 0, '', palsu) tidak akan disimpan ke pangkalan data, anda mungkin perlu menggunakan jenis penuding atau pengimbas/penilai untuk mengelakkan perkara ini
Dibetulkan dengan menukar jenis medan kepada *bool
:
type Client struct { ⋮ ClientActive *bool `json:"client_active" gorm:"default:true"` ⋮ }
Atas ialah kandungan terperinci Golang boolean tidak dikesan pada PATCH. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!