在将nil
的值分配给driver.Value
变量后,该变量不等于nil
。
package main
import (
"database/sql/driver"
"fmt"
)
func main() {
var dv driver.Value
dv = nil
if dv == nil {
fmt.Println("driver.Value nil")
}
var b []byte
if b == nil {
fmt.Println("byte slice nil")
}
dv = b
if dv == nil {
fmt.Println("driver.Value nil")
}
}
输出:
driver.Value nil
字节片为零
游乐场:https://play.golang.org/p/oTweLQLA8Qj
为什么会这样?
答案 0 :(得分:5)
driver.Value
是一个界面。 Go接口包含两个值:类型和指向基础值的指针。如果两个接口均为零,则该接口为零。
在您的情况下,
dv = b
其中b
为nil []byte
,接口dv
的类型为[]byte
,值为nil。所以接口本身不是nil。