cxfans
11/1/2019 - 6:05 AM

只有 tab 和 data 都为 nil 时,接⼝才等于 nil

只有 tab 和 data 都为 nil 时,接⼝才等于 nil

package main

import (
	"fmt"
	"reflect"
	"unsafe"
)

func main() {
	var a interface{} = nil
	var b interface{} = (*int)(nil)

	type iface struct {
		itab, data uintptr
	}

	ia := *(*iface)(unsafe.Pointer(&a))
	ib := *(*iface)(unsafe.Pointer(&b))

	fmt.Println(a == nil, ia)
	fmt.Println(b == nil, ib, reflect.ValueOf(b).IsNil())
}