为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
ITMISS 2022-06-06 17:00:10
whenNode是结构类型,它不能编译。但是什么时候Node是接口类型就可以了。为什么?type Node interface {}// test1's parameter are pointerfunc test1(b *Node) {    test2(b)}// test2's parameter are not pointerfunc test2(c Node) {}
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

回答标题中的问题:接口指针是指向接口值的指针。但是,接口指针并没有那么有用,因为接口已经是引用类型。


至于为什么您的代码在结构时无法编译Node,您正在尝试将指针传递给带值的函数。你应该这样做:


func test1(b *Node) {

    test2(*b)

}

但是当Node是空接口时,其参数的test2()类型interface{}也称为空接口。任何类型(包括b指针)都将被隐式转换为空接口。因此,当它的参数是 type 时,传递任何东西test2()都会编译interface{}。


查看完整回答
反对 回复 2022-06-06
?
森林海

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)

}


查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号