golang筆記:unsupported driver -> Scan pair: -> *string

golang裏,操做mysql數據庫,使用查詢語句的時候,通常的寫法mysql

 

rows, err := db.Query("select name from table")

if err != nil {
    return
}

for rows.Next() {
    var name string
    err = rows.Scan(&name)
    if err != nil {
        return
    }
}

當查出來的字段有NULL的時候,就會報這樣的錯誤unsupported driver -> Scan pair: <nil> -> *stringgolang

這又是因爲Go語言對數據類型的嚴格限制。name的類型是string,因此只能接受string類型的值,而此處nil是爲空的指針類型。最佳解決辦法是——插入記錄的時候不要有NULL存在。sql

可是根據個人數據庫設計,有的聯合查詢語句必然會返回NULL值,所以另外一種解決辦法是將name字段定義爲指針類型數據庫

rows, err := db.Query("SELECT name from table)

if err != nil {
    return
}

for rows.Next() {
    var name *string
    err = rows.Scan(&name)
    if err != nil {
        return
    }
}

其實只是改了name的類型定義一處,其他不變。當查詢結果爲NULL時,name的值爲nil。當查詢結果爲字符串時,Go會將name的值賦爲指向該字符串的指針,如此就能解決問題啦!數據庫設計

相關文章
相關標籤/搜索