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

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

问题描述

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 {

这位前pression LEN(行)似乎会导致运行时的恐慌,如果行是空的。

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

我如何检查空数组?我也试过行==为零,这也恐慌。

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总是返回一个非零值。错误被推迟到行的扫描方法被调用。

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不会返回一行。在这种情况下,QueryRow返回推迟这一错误,直到扫描的占位符*行值。

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.

所以,你想要做的是一样的东西:

So what you want to do is something like:

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
}

另外,因为你必须遍历 rows.Next 反正,你可以轻松地设置一个标志:

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
}

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

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