golang interface类型的nil

golang中interface变量,底层两个对象来存,一个是type、一个是value,只有type、value都为nil时,interface变量才是nil

package main

import (
	"fmt"
	"reflect"
)

type People interface {
    
    
	Show()
}

type Student struct{
    
    }

func (stu *Student) Show() {
    
    }

func live() People {
    
    
	var stu *Student
	return stu
}

func main() {
    
    
	i := live()
	fmt.Println(reflect.TypeOf(i))
	fmt.Println(i)

	if i == nil {
    
    
		fmt.Println("我是为空")
	} else {
    
    
		fmt.Println("我不为空")
	}
}

输出结果为:
在这里插入图片描述

可以看到interface 变量i,虽然值为nil,但类型是Student

如果想判断变量value是否为空,可以指定type

func main() {
    
    
	i := live()
	fmt.Println(reflect.TypeOf(i))
	fmt.Println(i)

	if i == (*Student)(nil) {
    
    
		fmt.Println("我是为空")
	} else {
    
    
		fmt.Println("我不为空")
	}
}

猜你喜欢

转载自blog.csdn.net/xjmtxwd24/article/details/132006058