Arrays 如何检查空数组(结构的数组)
mySQL查询函数返回定义为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
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。我更喜欢它。