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

Golang boolean tidak dikesan pada PATCH

王林
王林ke hadapan
2024-02-12 20:00:10976semak imbas

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
}

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.

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"`
    ⋮
}

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

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam