首頁  >  文章  >  後端開發  >  我應該如何將 MySQL 的 `bit(1)` 類型對應到 Go 類型?

我應該如何將 MySQL 的 `bit(1)` 類型對應到 Go 類型?

Susan Sarandon
Susan Sarandon原創
2024-11-23 06:41:16801瀏覽

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

如何將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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn