2 回答

TA贡献1828条经验 获得超3个赞
回答标题中的问题:接口指针是指向接口值的指针。但是,接口指针并没有那么有用,因为接口已经是引用类型。
至于为什么您的代码在结构时无法编译Node,您正在尝试将指针传递给带值的函数。你应该这样做:
func test1(b *Node) {
test2(*b)
}
但是当Node是空接口时,其参数的test2()类型interface{}也称为空接口。任何类型(包括b指针)都将被隐式转换为空接口。因此,当它的参数是 type 时,传递任何东西test2()都会编译interface{}。

TA贡献2011条经验 获得超2个赞
让我们看一下声明的一些变体Node:
示例 1:
type Node interface {
}
代码编译是因为所有类型都满足空接口。
示例 2:
type Node interface {
AnyMethod()
}
编译器报告以下错误:
不能在 test2 的参数中使用 b (type *Node) 作为类型 Node:*Node 是指向接口的指针,而不是接口
编译失败,因为 a*Node没有方法AnyMethod。
示例 3:
type Node struct {
}
编译器报告以下错误:
不能在 test2 的参数中使用 b (type *Node) 作为类型 Node
编译失败是因为*Node和Node是不同的类型。
编译错误的一种修复方法是取消引用指针:
func test1(b *Node) {
test2(*b)
}
- 2 回答
- 0 关注
- 160 浏览
添加回答
举报