将nil值分配给driver.Value会使driver.Value不等于nil

时间:2019-10-07 15:47:02

标签: sql go

在将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

为什么会这样?

1 个答案:

答案 0 :(得分:5)

driver.Value是一个界面。 Go接口包含两个值:类型和指向基础值的指针。如果两个接口均为零,则该接口为零。

在您的情况下,

dv = b

其中b为nil []byte,接口dv的类型为[]byte,值为nil。所以接口本身不是nil。

https://golang.org/doc/faq#nil_error