Go每日一题(92) 的题目如下

3812 次点击 · 7 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面这段代码输出什么?为什么?

type People interface {
	Show()
}

type Student struct{}

func (stu *Student) Show() {

}

func main() {

	var s *Student
	if s == nil {
		fmt.Println("s is nil")
	} else {
		fmt.Println("s is not nil")
	}
	var p People = s
	if p == nil {
		fmt.Println("p is nil")
	} else {
		fmt.Println("p is not nil")
	}
}
3812 阅读
30 回复
Dessert
Dessert · #1 · 3年之前

Dazso

gonglf
gonglf · #2 · 3年之前

当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil

gonglf
gonglf · #3 · 3年之前

接口分为:动态值,动态类型

Natsuwau
Natsuwau · #4 · 3年之前

mark

dingweihua
dingweihua · #5 · 3年之前
  1. 接口包含动态值、动态类型
  2. 当且仅当接口类型的动态值和动态类型都为nil时,接口类型的值才==nil
euibieur894
euibieur894 · #6 · 3年之前

打卡

a406299736
a406299736 · #7 · 3年之前

打卡

neil_liu
neil_liu · #8 · 3年之前

mark

Zuos
Zuos · #9 · 3年之前

mark

AntonyZhang
AntonyZhang · #10 · 3年之前

mark 当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil

QRQRQRqrqr
QRQRQRqrqr · #11 · 3年之前

interface 当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil

Inforleo
Inforleo · #12 · 3年之前

m

henry1
henry1 · #13 · 3年之前

打卡

mingtop
mingtop · #14 · 3年之前

当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil

wuchenzi
wuchenzi · #15 · 3年之前

当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil。上面的代码,给变量 p 赋值之后,p 的动态值是 nil,但是动态类型却是 *Student,是一个 nil 指针,所以相等条件不成立。学习了,加油!!!

droice
droice · #16 · 3年之前

yulongzh
yulongzh · #17 · 3年之前

"s is nil" "p is not nil"

feiyang
feiyang · #18 · 2年之前

当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil。

kingJ
kingJ · #19 · 2年之前

当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil

hasbug
hasbug · #20 · 2年之前

mark

wzbwzt
wzbwzt · #21 · 2年之前

1

huangyf168
huangyf168 · #22 · 2年之前

mark

cllgeek
cllgeek · #23 · 2年之前

打卡

cainiaoyige01
cainiaoyige01 · #24 · 2年之前

*student 是一个nil指针 并不是nil 也就是动态类型与动态值不相等!关键点是:动态类型与动态值均为nil的时候 接口才为nil !!!

feiyang
feiyang · #25 · 2年之前

interface 当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil

hasbug
hasbug · #26 · 2年之前

mark

YuPeng
YuPeng · #27 · 大约1年之前

mark

amocea
amocea · #28 · 大约1年之前
  1. var s *Student 的话,s 是一个指针对象,零值是 nil;所以第一个输出 : s is nil
  2. var p People = s 的话, 接口变量引用 nil,使用接口变量和 nil 比较,需要比较接口的实际类型和存储的值,所以是 p(type=nil,value=nil) == s(type=Studenet,*value=nil) 比较,所以是 false ;第二个输出 p is not nil
brothersam
brothersam · #29 · 10月之前

"s is nil" "p is not nil"

420303865
420303865 · #30 · 10月之前

mark

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传