第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

無法將 <nil> 轉(zhuǎn)換為類型 ...?

無法將 <nil> 轉(zhuǎn)換為類型 ...?

Go
藍(lán)山帝景 2022-01-04 18:49:01
我嘗試使用 database/sql 將數(shù)據(jù)庫行查詢?yōu)?Go 類型,我的代碼片段如下:type User struct {    user_id     int64    user_name   string    user_mobile string    password    string    email       interface{}    nickname    string    level       byte    locked      bool    create_time string    comment     string  // convert <nil> to *string error }func TestQueryUser(t *testing.T) {    db := QueryUser(driverName, dataSourceName)    stmtResults, err := db.Prepare(queryAll)    defer stmtResults.Close()    var r *User = new(User)    arr := []interface{}{        &r.user_id, &r.user_name, &r.user_mobile, &r.password, &r.email,        &r.nickname, &r.level, &r.locked, &r.create_time, &r.comment,    }    err = stmtResults.QueryRow(username).Scan(arr...)    if err != nil {        t.Error(err.Error())    }    fmt.Println(r.email)}MySQL:如您所見,某些字段具有NULL值,因此我必須將interface{}類型設(shè)置為 Go 的 User 結(jié)構(gòu),然后將其轉(zhuǎn)換NULL為nil.--- FAIL: TestQueryUser (0.00s)        user_test.go:48: sql: Scan error on column index 9: unsupported Scan, storing driver.Value type <nil> into type *string有人有更好的方法嗎? 或者我必須更改 MySQL 字段并設(shè)置其 DEFAULT ' '
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

首先是簡短的回答: sql 包中有一些類型,例如sql.NullString(用于表中的可為空字符串,并猜測Nullint64和NullBool和...用法:)),您應(yīng)該在結(jié)構(gòu)中使用它們。


長一個(gè):有兩種接口在走這個(gè)可用,首先是掃描儀,另一個(gè)是估值師對數(shù)據(jù)庫的任何特殊類型,(例如,我用這主要與JSONB Postgres里),你需要?jiǎng)?chuàng)建一個(gè)類型,在該類型上實(shí)現(xiàn)這兩個(gè)(或其中一個(gè))接口。


調(diào)用Scan函數(shù)時(shí)會使用掃描儀。來自數(shù)據(jù)庫驅(qū)動程序的數(shù)據(jù),通常[]byte是輸入,您負(fù)責(zé)處理它。另一個(gè),當(dāng)該值用作查詢中的輸入時(shí)使用。如果您只需要讀取數(shù)據(jù),則結(jié)果“通常”是一個(gè)字節(jié)(和一個(gè)錯(cuò)誤),Scanner 就足夠了,反之亦然,如果您需要在查詢中寫入?yún)?shù) Valuer 就足夠了


對于實(shí)現(xiàn)示例,我建議查看sql包中的類型。


還有一個(gè)在 postgresql 中與 JSONB/JSON 類型一起使用的類型示例


// GenericJSONField is used to handle generic json data in postgres

type GenericJSONField map[string]interface{}



// Scan convert the json field into our type

func (v *GenericJSONField) Scan(src interface{}) error {

    var b []byte

    switch src.(type) {

    case []byte:

        b = src.([]byte)

    case string:

        b = []byte(src.(string))

    case nil:

        b = make([]byte, 0)

    default:

        return errors.New("unsupported type")

    }


    return json.Unmarshal(b, v)

}


// Value try to get the string slice representation in database

func (v GenericJSONField) Value() (driver.Value, error) {

    return json.Marshal(v)

}

驅(qū)動值通常是[]byte但string并且nil是可以接受的。所以這也可以處理可為空的字段。


查看完整回答
反對 回復(fù) 2022-01-04
  • 1 回答
  • 0 關(guān)注
  • 646 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號