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

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

下面代码输出什么?

type A interface {
	ShowA() int
}

type B interface {
	ShowB() int
}

type Work struct {
	i int
}

func (w Work) ShowA() int {
	return w.i + 10
}

func (w Work) ShowB() int {
	return w.i + 20
}

func main() {
	var a A = Work{3}
	s := a.(Work)
	fmt.Println(s.ShowA())
	fmt.Println(s.ShowB())
}
  • A. 13 23
  • B. compilation error
4068 阅读
37 回复
euibieur894
euibieur894 · #1 · 3年之前

打卡

dingweihua
dingweihua · #2 · 3年之前

我还以为这里又有坑呢

Natsuwau
Natsuwau · #3 · 3年之前

mark

summers
summers · #4 · 3年之前

m

vicky_h
vicky_h · #5 · 3年之前

居然没有坑

Zuos
Zuos · #6 · 3年之前

mark

henry1
henry1 · #7 · 3年之前

打卡

feiyang
feiyang · #8 · 3年之前

mark

felixzxk
felixzxk · #9 · 3年之前

m

cc1234
cc1234 · #10 · 3年之前

13 23

mingtop
mingtop · #11 · 3年之前

这道题可以和第 15 天的第三题 和第 16 天的第三题结合起来看。这个15天和16天在哪看?

wzbwzt
wzbwzt · #12 · 3年之前

1

a406299736
a406299736 · #13 · 3年之前

mark。。。

hades2013
hades2013 · #14 · 2年之前

打卡学习

feiyang
feiyang · #15 · 2年之前

知识点:类型断言。

brothersam
brothersam · #16 · 2年之前

A. 13 23

Dessert
Dessert · #17 · 2年之前

类型断言回

wzbwzt
wzbwzt · #18 · 2年之前

1

hasbug
hasbug · #19 · 2年之前

mark

huangyf168
huangyf168 · #20 · 2年之前

mark

1121cczj
1121cczj · #21 · 2年之前

mark

mingtop
mingtop · #22 · 2年之前

s := a.(Work) a A ==> Work 结构体,实现了两个接口

a406299736
a406299736 · #23 · 2年之前

mark

a406299736
a406299736 · #24 · 2年之前
mingtopmingtop #11 回复

这道题可以和第 15 天的第三题 和第 16 天的第三题结合起来看。这个15天和16天在哪看?

同问

NovaChaos
NovaChaos · #25 · 2年之前

mk

hasbug
hasbug · #26 · 2年之前

mark

huangyf168
huangyf168 · #27 · 2年之前

mark

feiyang
feiyang · #28 · 2年之前

s type 是 Work。 断言类型是 assertion 。要注意方法接收者的类型,如果这是里

func (w *Work) ShowA()

func (w *Work) ShowB()

这样就不行,因为有些变量,无法取得地址,所以编译报错。 反过来是可以的,知道地址,一定可以取得那个地址的变量的值

YuPeng
YuPeng · #29 · 2年之前

打卡

flyZ
flyZ · #30 · 2年之前

make

hasbug
hasbug · #31 · 2年之前

mark

528548004
528548004 · #32 · 2年之前

mark

NovaChaos
NovaChaos · #33 · 2年之前

mk

sivanliu
sivanliu · #34 · 2年之前

打卡

zhangwei_go
zhangwei_go · #35 · 大约1年之前

类型转换

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

首先,我们定义了两个接口A和B,分别包含方法ShowA()和ShowB()。

然后,我们定义了一个结构体Work,并实现了A和B接口中对应的方法ShowA()和ShowB()。在这些方法中,它们都会返回结构体字段i与一个常数的和。

在main()函数中,我们创建了一个Work类型的变量,其值为Work{3},这意味着它的字段i被初始化为3。

接着,我们将这个Work类型的变量赋值给接口类型A的变量a,由于Work类型已经实现了A接口的所有方法,所以这是一个有效的赋值操作。

之后,我们使用类型断言(a.(Work))将接口变量a转换回Work类型,并赋值给s。这里是通过类型断言确保s可以调用Work的其他方法。

最后,我们分别调用s.ShowA()和s.ShowB()方法,它们会返回w.i + 10和w.i + 20,因为这里的w.i是3,所以输出结果分别为13和23。

brothersam
brothersam · #37 · 7月之前

A. 13 23

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