如何將MySQL 的bit 類型對應到Go 的型別
在MySQL 中,bit(1) 資料型別用於儲存布林值。當遷移到 Go 時,開發人員經常面臨確定將其映射到的適當 Go 類型的挑戰。
問題:
在提供的範例中,MySQL 表包含一個名為刪除了類型 bit(1)。應使用什麼 Go 類型來表示 Go 結構中的此列?
答案:
建議的方法是使用 sqlx 函式庫提供的自訂資料型別。 sqlx 定義了一個名為BitBool 的類型,專門處理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 實作了Go 的bool 類型和MySQL 的BIT(1) 類型之間轉換所需的介面:
// 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 }
在提供的Go 結構體中,Deleted應聲明為:
Deleted BitBool `form:"-"`
以上是我應該如何將 MySQL 的 `bit(1)` 類型對應到 Go 類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!