问题描述
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
QueryRow
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
ErrNoRows.Scan
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
rows.Next
defer rows.Close()
has_results := false
for rows.Next() {
has_results := true
//do stuff
}
if (!has_results) {
//error handling
}
这篇关于Golang:如何检查空数组(结构数组)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!