【发布时间】:2021-06-04 00:23:38
【问题描述】:
假设我有以下类型定义:
type ICat interface {
Meow() string
}
type Cat struct {
Name string
}
func (c Cat) Meow() string {
return "Meow"
}
当我执行这个操作时:
var a Cat
a.Name = "Tom"
在内存中分配了一个 Cat 类型的结构,并分配了它的一个字段。
但是,如果执行以下操作:
var b ICat
内存中究竟分配了什么? Golang 接口只是一个包含指向另一个结构的指针的结构吗? “盒装指针”?。
【问题讨论】:
-
它(就像)一个指向具体数据的指针,但仅限于接口提供的方法。这也是为什么你可以在
interface{}中放入任何东西的原因,因为 go 中的每个类型都至少实现了 0 个方法。此处的其他答案很好地解释了实际实现。 -
"是一个 Golang 接口只是一个包含指向另一个结构的指针的结构?一个“盒装指针”?" 1.语言的名称是“Go”(不是Golang)。 2. 这是一个实现细节,过去发生了变化,将来可能会发生变化。 3. 没有必要知道这一点,因为您无法对这些信息做任何事情。
标签: go