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!