3 回答
TA贡献1848条经验 获得超2个赞
Go 是否试图阻止我将接口指针传递给函数?
是的。
在(几乎*)所有情况下,接口指针都是错误的。
(* 在非常罕见和微妙的情况下,指针到接口是有意义的,但很有可能您每 5 年不会看到它们超过一次。)
(挑剔:该语言称为“Go”。“golang.org”是网站。类似的基础知识包含在兼容性承诺中,并且不依赖于版本:Go 1.0、1.12 和 1.16 在这方面的行为完全相同.)
TA贡献1775条经验 获得超8个赞
它与类型系统的工作方式有关。接口类型I定义了方法集。方法集是为 type 定义的I,而不是为 type 定义的*I。正因为如此,其使用*I受到限制。当函数要设置接口值时可以使用它,但很少见:
func f(x *error) {
*x = fmt.Errorf("Some error")
}
请注意,接口本身可以有一个底层指针值:
func f(x someInterface) {
*x.(*someType) = value
}
func main() {
x := someType{}
f(&x)
}
这对于非接口类型是不同的。当您为非接口类型 定义方法时,该方法同时为和T定义。如果您为 定义方法,则它仅是为 定义的,而不是为 定义的。T*T*T*TT
TA贡献1772条经验 获得超8个赞
只需移除指针即可使用该界面。
func callHello(i myinter) {
i.hello()
}
该 func 现在将接受实现该接口的结构实例,或指向实现该接口的结构实例的指针。
func main() {
instance := mystruct{}
pointer := &mystruct{}
callHello(instance)
callHello(pointer)
}
输出以下内容:
I am T!
I am T!
Program exited.
- 3 回答
- 0 关注
- 111 浏览
添加回答
举报