Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何检查空数组(结构的数组)_Arrays_Go - Fatal编程技术网

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

Arrays 如何检查空数组(结构的数组),arrays,go,Arrays,Go,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(r

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)似乎会导致运行时死机


如何检查空数组?我还尝试了rows==nil,这也会引起恐慌。

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

QueryRow执行一个最多返回一行的查询。QueryRow始终返回非nil值。错误将推迟到调用行的扫描方法

在这种情况下,如果没有行,则会出现
ErrNoRows
,但会延迟到发生
.Scan

当QueryRow不返回行时,通过扫描返回ErrNoRows。在这种情况下,QueryRow返回一个占位符*行值,将此错误推迟到扫描

所以你想做的是:

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
}
否则,由于您需要在
行上循环。接下来,您可以轻松设置标志:

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

这是哪个图书馆?因为返回两个变量。您可以检查rows.Next()在第一次检查时是否返回false,我想?谢谢。现在可以了。我从github.com/ziutek/mymysql包更改为github.com/go-sql-driver/mysql。我更喜欢它。