~~~
如下############ 这行:
我想问下类似下面代码中 当 发生错误,err!=nil 返回错误的时候 按理说我需要 defer row.Close() 关闭然后输出错误
但是我测试下来发现当删除 带###### 这行就正常, 加了就不正常, 这样不关闭有影响?
在else {} 那里当触发 后直接关闭连接,,但是就是 在 if 里如果发生错误后 不关闭没什么事情?
if row, err := mysql.DB.Query("select name,age from xmwhere id = " + id); err != nil {
defer row.Close() //############### 这样直接报错,删除这行就正常,难道err!=nil后无需关闭连接?
fmt.Println("错误0:", err)
} else {
defer row.Close()
for row.Next() {
if err2 := row.Scan(&a.name, &a.age); err2 != nil {
log.Println("错误:", err2)
}
}
}
~~~
你走到这里报错 是因为 err 不是 nil 这个时候 row 就是 nil,那么这个情况 row.Close() <=> nil.Close() 肯定会报错
#1
更多评论