如何检查空数组(结构数组)

mySQL 查询函数返回一个行数组,定义为


type Row []interface{}

我想检查返回的数组是否为空,但出现运行时恐慌:


s := fmt.Sprintf("select id, secret, shortname from beehives where shortname = '%s'", beehive)


rows, res, err := database.Query(s)

if err == nil {

    if len(rows) != 1 {

如果行为空,表达式 len(rows) 似乎会导致运行时恐慌。


如何检查空数组?我也试过行 == nil,这也会引起恐慌。


慕田峪4524236
浏览 146回答 1
1回答

繁花不似锦

看起来您可以使用QueryRow,因为该查询预计仅返回一行。QueryRow 执行预计最多返回一行的查询。QueryRow 总是返回一个非零值。错误被推迟到调用 Row 的 Scan 方法。在这种情况下,如果没有行,则ErrNoRows发生,但会推迟到.Scan发生。当 QueryRow 不返回行时,Scan 返回 ErrNoRows。在这种情况下,QueryRow 返回一个占位符 *Row 值,该值将此错误推迟到扫描。所以你想做的是:var id intvar secret stringvar shortname stringerr := db.QueryRow("SELECT ...").Scan(&id, &secret, &shortname)switch {    case err == sql.ErrNoRows:        log.Printf("Not found.")    case err != nil:        log.Fatal(err)    default:        //do stuff}否则,由于您rows.Next无论如何都需要循环,您可以轻松设置一个标志:defer rows.Close()has_results := falsefor rows.Next() {    has_results = true    //do stuff}if (!has_results) {    //error handling}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go