Rumah > pembangunan bahagian belakang > Golang > Golang boolean tidak dikesan pada PATCH

Golang boolean tidak dikesan pada PATCH

王林
Lepaskan: 2024-02-12 20:00:10
ke hadapan
1048 orang telah melayarinya

Golang 布尔值未在 PATCH 上检测到

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.

Kandungan soalan

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
}
Salin selepas log masuk

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)

}
Salin selepas log masuk

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.

Penyelesaian

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"`
    ⋮
}
Salin selepas log masuk

Atas ialah kandungan terperinci Golang boolean tidak dikesan pada PATCH. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan