代码段如下:
package main
import (
"fmt"
"reflect"
)
func main() {
a := (*interface{})(nil)
fmt.Println(reflect.TypeOf(a), reflect.ValueOf(a))
var b interface{} = (*interface{})(nil)
fmt.Println(reflect.TypeOf(b), reflect.ValueOf(b))
fmt.Println(a == nil, b == nil)
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
*interface {} <nil>
*interface {} <nil>
true false
Run Code Online (Sandbox Code Playgroud)
所以var interface{}不同:=,为什么?
zzn*_*zzn 14
在封面下,接口实现为两个元素,一个类型和一个值.该值称为接口的动态值,是一个任意的具体值,类型是值的类型.对于int值3,接口值示意性地包含(int,3).
仅当内部值和类型都未设置(nil,nil)时,接口值才为nil.特别是,nil接口将始终保持nil类型.如果我们在接口值中存储类型为*int的nil指针,则无论指针的值如何,内部类型都将是*int:(*int,nil).因此,即使内部指针为零,这样的接口值也将是非零的.
a := (*interface{})(nil)等于var a *interface{} = nil.
但是var b interface{} = (*interface{})(nil),mean b是type interface{},interface{}只有nil当它的类型和值都是变量时才变量nil,显然类型*interface{}不是nil.