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的值賦爲指向該字符串的指針,如此就能解決問題啦!數據庫設計