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

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

如何創(chuàng)建一個(gè)空的sql.Rows實(shí)例?

如何創(chuàng)建一個(gè)空的sql.Rows實(shí)例?

Go
MMMHUHU 2021-04-02 14:11:40
我有一個(gè)(*sql.Rows, error)在Go中返回的函數(shù)。在某些情況下,沒有任何返回值,但是也沒有錯(cuò)誤。選擇似乎是:if (...) {    return nil, nil}然后,在調(diào)用方中:rows, err := fn()if err != nil {    return nil, err}if rows == nil {   ...} else {    for rows.Next() {    ...    }}否則返回一個(gè)特殊的錯(cuò)誤,然后我檢查。我認(rèn)為如果可以返回一個(gè)有效的Rows實(shí)例,將會更加優(yōu)雅,但是除了Next()調(diào)用它的方法時(shí)返回false之外,它什么也沒有做,就像這樣:if (...) {    return EmptyRows(), nil}并且,在呼叫者中:rows, err := fn()if err != nil {    return nil, err}for rows.Next() {    ...}我可以做類似的事情:if (...) {    return db.QueryRows("select * from something where true=false"), nil}但這似乎很愚蠢。有什么建議嗎?
查看完整描述

1 回答

?
白衣染霜花

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

我將對此進(jìn)行一些不同的處理,然后將處理程序傳遞給您的函數(shù)。因此,如果您的函數(shù)當(dāng)前為:


func YourFunc() (*sql.Rows, error) {

    // ...

    if (...) {

        return nil, nil

    }

    return rows, nil

}

它將是:


func yourFunc() (*sql.Rows, error) {

    // ...

    if (...) {

        return nil, sql.ErrNoRows

    }

    return rows, nil

}


func YourFunc(cb func(*sql.Rows)) error {

    rows, err := yourFunc()

    if err == sql.ErrNoRows {

        return nil

    }

    if err != nil {

        return err

    }

    cb(rows)

    return nil

}

然后在您的呼叫者中:


err := YourFunc(func(row *sql.Rows) {

    for rows.Next() {

        // ...

    }

})

這將具有傳遞給您的函數(shù),僅當(dāng)存在行時(shí)才調(diào)用該函數(shù),如果您關(guān)心的是行,則您將得到錯(cuò)誤,并且調(diào)用方的語法很干凈。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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