接口的动态类型、动态值、静态类型

题目:

下面代码输出什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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() {
c := Work{3}
var a A = c
var b B = c
fmt.Println(a.ShowB())
fmt.Println(b.ShowA())
}
  • A. 23 13
  • B. compilation error

答案解析:

参考答案及解析:B。

知识点:接口的静态类型。a、b 具有相同的动态类型和动态值,分别是结构体 work 和 {3};a 的静态类型是 A,b 的静态类型是 B,接口 A 不包括方法 ShowB(),接口 B 也不包括方法 ShowA(),编译报错。

看下编译的错误:

1
2
a.ShowB undefined (type A has no field or method ShowB)
b.ShowA undefined (type B has no field or method ShowA)

接口的动态类型、动态值、静态类型
http://example.com/2023/07/05/Go每日一题/接口的动态类型、动态值、静态类型/
作者
Feng Tao
发布于
2023年7月5日
更新于
2023年7月6日
许可协议