Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya harus memetakan jenis `bit(1)` MySQL kepada jenis Go?

Bagaimanakah saya harus memetakan jenis `bit(1)` MySQL kepada jenis Go?

Susan Sarandon
Susan Sarandonasal
2024-11-23 06:41:16799semak imbas

How should I map MySQL's `bit(1)` type to a Go type?

Cara Memetakan Jenis bit MySQL kepada Jenis Go

Dalam MySQL, jenis data bit(1) digunakan untuk menyimpan nilai Boolean. Apabila berhijrah ke Go, pembangun sering menghadapi cabaran untuk menentukan jenis Go yang sesuai untuk dipetakan.

Soalan:
Dalam contoh yang disediakan, jadual MySQL mengandungi lajur bernama dipadamkan daripada jenis bit(1). Apakah jenis Go yang harus digunakan untuk mewakili lajur ini dalam struct Go?

Jawapan:
Pendekatan yang disyorkan ialah menggunakan jenis data tersuai, seperti yang disediakan oleh perpustakaan sqlx. sqlx mentakrifkan jenis yang dipanggil BitBool yang secara khusus mengendalikan nilai BIT(1):

// BitBool is an implementation of a bool for the MySQL type BIT(1).
// This type allows you to avoid wasting an entire byte for MySQL's boolean type TINYINT.
type BitBool bool

BitBool melaksanakan antara muka yang diperlukan untuk menukar antara jenis bool Go dan jenis BIT(1) MySQL:

// Value implements the driver.Valuer interface,
// and turns the BitBool into a bitfield (BIT(1)) for MySQL storage.
func (b BitBool) Value() (driver.Value, error) {
    if b {
        return []byte{1}, nil
    } else {
        return []byte{0}, nil
    }
}

// Scan implements the sql.Scanner interface,
// and turns the bitfield incoming from MySQL into a BitBool
func (b *BitBool) Scan(src interface{}) error {
    v, ok := src.([]byte)
    if !ok {
        return errors.New("bad []byte type assertion")
    }
    *b = v[0] == 1
    return nil
}

Dalam struct Go yang disediakan, Dipadam harus diisytiharkan sebagai:

Deleted     BitBool `form:"-"`

Atas ialah kandungan terperinci Bagaimanakah saya harus memetakan jenis `bit(1)` MySQL kepada jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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