我有一个在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
}
但是那看起来很愚蠢。有什么建议吗?
答案 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
}
这将使您传递的函数仅在有行的情况下才被调用,如果您关心的是错误,并且调用者的语法很干净,则会出现错误。