golang中接口指针和接口值有什么区别

whenNode是结构类型,它不能编译。


但是什么时候Node是接口类型就可以了。


为什么?


type Node interface {

}

// test1's parameter are pointer

func test1(b *Node) {

    test2(b)

}

// test2's parameter are not pointer

func test2(c Node) {}


ITMISS
浏览 161回答 2
2回答

倚天杖

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

森林海

让我们看一下声明的一些变体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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go