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("我不为空")
	}
}

输出结果为:
golang interface类型的nil_第1张图片

可以看到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("我不为空")
	}
}

你可能感兴趣的:(笔记,golang,开发语言,后端)