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

Susan Sarandon
Lepaskan: 2024-11-23 06:41:16
asal
822 orang telah melayarinya

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

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

Dalam struct Go yang disediakan, Dipadam harus diisytiharkan sebagai:

Deleted     BitBool `form:"-"`
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan