我将以不同的方式处理这个问题,并将处理程序传递给您的函数。因此,如果您当前的功能是:
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() {
// ...
}
})
这个函数只有在有行的情况下才会被调用,如果您关心的是错误的话会得到错误,并且调用方的语法非常干净。