Go每日一题 今日(2025-03-27) 的题目如下

4429 次点击 · 7 赞 ·大约8小时之前 开始浏览   · 来源「Golang修养之路」

以下代码打印出来什么内容,说出为什么。

package main

import (
	"fmt"
)

type People interface {
	Show()
}

type Student struct{}

func (stu *Student) Show() {

}

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

func main() {
	if live() == nil {
		fmt.Println("AAAAAAA")
	} else {
		fmt.Println("BBBBBBB")
	}
}
4429 阅读
66 回复
YuPeng
YuPeng · #51 · 2年之前

打卡

Zuos
Zuos · #52 · 2年之前

mark

cllgeek
cllgeek · #53 · 2年之前

mark

feiyang
feiyang · #54 · 2年之前

stu 是一个指向 nil 的空指针,但是最后return stu 会触发匿名变量 People = stu 值拷贝动作,所以最后live()放回给上层的是一个People insterface{}类型,也就是一个iface struct{}类型。 stu 为 nil,只是iface中的 data 为 nil 而已。 但是iface struct{}本身并不为 nil.

huangyf168
huangyf168 · #55 · 2年之前

mark

hupeng
hupeng · #56 · 2年之前

mark

JustBasicOperation
JustBasicOperation · #57 · 2年之前

如果是这样的话,People接口换成空接口答案应该也是一样的,都会触发值拷贝,最后返回的eface结构体也不为nil

hasbug
hasbug · #58 · 2年之前

mark

brothersam
brothersam · #59 · 2年之前

BBBBBBB 因为 stu 是一个指针

1174en
1174en · #60 · 2年之前

m

TimLiuDream
TimLiuDream · #61 · 2年之前

mark

huangyf168
huangyf168 · #62 · 2年之前

mark

BigBigGopher
BigBigGopher · #63 · 大约1年之前

mk

BigBigGopher
BigBigGopher · #64 · 11月之前

stu 是一个指向 nil 的空指针,但是最后return stu 会触发匿名变量 People = stu 值拷贝动作,所以最后live()返回给上层的是一个People insterface{}类型,也就是一个iface struct{}类型。 stu 为 nil,只是iface中的 data 为 nil 而已。 但是iface struct{}本身并不为 nil.

liangsena
liangsena · #65 · 11月之前

mark

euibieur894
euibieur894 · #66 · 4月之前

打卡

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