如何创建一个空的sql.Rows实例?

时间:2018-07-31 19:09:01

标签: go

我有一个在Go语言中返回dt[, a]的函数。在某些情况下,没有任何返回值,但是也没有错误。选择似乎是:

numeric

然后在呼叫者中:

(*sql.Rows, error)

,否则返回一个特殊错误,然后检查。我认为,如果我可以返回有效的Rows实例,将会更加优雅,但是在调用其if (...) { return nil, nil } 方法时,除了返回false之外,它什么也没做,

rows, err := fn()
if err != nil {
    return nil, err
}

if rows == nil {
   ...
} else {
    for rows.Next() {
    ...
    }
}

,然后在呼叫者中:

Next()

我可以做类似的事情:

if (...) {
    return EmptyRows(), nil
}

但是那看起来很愚蠢。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我将对此进行一些不同的处理,然后将处理程序传递给您的函数。因此,如果您的功能当前为:

You can use Subject/BehaviorSubject which will act as observer and observable. You can emit the token and catch in the another service. Here is the code

In AuthenticationService:

private modelAlertEvent = new Subject<any>();
public modelAlertEventObservable = this.modelAlertEvent.asObservable();
this.modelAlertEvent.next(token);

In Another Service

this.modelsubscribe = this.authservice.modelAlertEventObservable.subscribe(token=>{
    console.log(token);
});

它应该是:

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
}

这将使您传递的函数仅在有行的情况下才被调用,如果您关心的是错误,并且调用者的语法很干净,则会出现错误。