下面这段代码输出什么?
package main
import (
"fmt"
)
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.ShowA())
fmt.Println(b.ShowB())
}
13
23
知识点:接口。
本题代码解析过程
-
结构体和接口实现:
Work结构体实现了接口A的ShowA()方法,返回w.i + 10。Work结构体也实现了接口B的ShowB()方法,返回w.i + 20。
-
变量赋值:
c := Work{3}:创建了一个Work类型的实例c,其字段i的值为3。var a A = c:将c赋值给接口类型A的变量a。此时,a可以调用ShowA()方法。var b B = c:将c赋值给接口类型B的变量b。此时,b可以调用ShowB()方法。
-
方法调用:
a.ShowA():调用Work的ShowA()方法,返回3 + 10 = 13。b.ShowB():调用Work的ShowB()方法,返回3 + 20 = 23。
-
输出结果:
fmt.Println(a.ShowA())输出13。fmt.Println(b.ShowB())输出23。