指针类型和值类型的方法

题目:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type People interface {
Speak(string) string
}

type Student struct{}

func (stu *Student) Speak(think string) (talk string) {
if think == "speak" {
talk = "speak"
} else {
talk = "hi"
}
return
}

func main() {
var peo People = Student{}
think := "speak"
fmt.Println(peo.Speak(think))
}
  • A. speak
  • B. compilation error

答案解析:

参考答案及解析:B。

编译错误 Student does not implement People (Speak method has pointer receiver),值类型 Student 没有实现接口的 Speak() 方法,而是指针类型 *Student 实现改方法。

详细请参考这篇文章 https://seekload.net/2019/06/06/go-study-method.html


指针类型和值类型的方法
http://example.com/2023/07/28/Go每日一题/指针类型和值类型的方法/
作者
Feng Tao
发布于
2023年7月28日
更新于
2023年7月28日
许可协议