如何检查空数组(结构数组) [英] How to check for empty array (array of struct)

查看:99
本文介绍了如何检查空数组(结构数组)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

mySQL查询函数返回的行数组定义为

A mySQL Query function returns an array of rows witch is defined as

type Row []interface{}

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

I would like to check if the returned array is empty, but I get a runtime panic:

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)似乎导致运行时出现紧急情况。

The expression len(rows) seems to cause the runtime panic if rows is empty.

如何检查空数组?我还尝试了行== nil,这也很恐慌。

How can I check for an empty array? I tried also rows == nil, which also panics.

推荐答案

看起来您可以使用 QueryRow ,因为该查询仅返回一行。

It looks like you could use QueryRow, since that query is expected to return only one row.


QueryRow执行的查询预期最多返回一行。 QueryRow始终返回非nil值。错误会一直延迟到调用Row的Scan方法。

QueryRow executes a query that is expected to return at most one row. QueryRow always return a non-nil value. Errors are deferred until Row's Scan method is called.

在这种情况下,如果没有行,则 ErrNoRows 发生,但被推迟到 .Scan 发生。

In this case, if there is no row, the ErrNoRows occurs, but is deferred until a .Scan occurs.


ErrNoRows是当QueryRow不返回行时由Scan返回的。在这种情况下,QueryRow返回一个占位符* Row值,该值将延迟此错误直到扫描。

ErrNoRows is returned by Scan when QueryRow doesn't return a row. In such a case, QueryRow returns a placeholder *Row value that defers this error until a Scan.

所以您要做的是

var id int
var secret string
var shortname string
err := 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
}

否则,因为您需要遍历行。下一个无论如何,您可以轻松地设置一个标志:

Otherwise, since you need to be looping over rows.Next anyways, you can easily set a flag:

defer rows.Close()
has_results := false
for rows.Next() {
    has_results = true
    //do stuff
}
if (!has_results) {
    //error handling
}

这篇关于如何检查空数组(结构数组)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆