go语言空interface什么意思?

天外怪魔 2019-05-30 11:05:50
比如有下面这个定义:

typedef struct computeraction
{
corenumber int
_intput interface{}
_output interface{}
}

同时,有下面这个函数:

genAction(writer io.Writer)
{
// balabala
}

然后,调用的时候可以这样:

var act1 computeraction
genAction(act1._intput.(io.Writer)

不明白的地方有2个,
一是为什么可以这个一个方法都没有的interface?
二是genAction(act1._intput.(io.Writer),是特么几个意思?这里的_input后面()是表示调用吗?
...全文
123 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ying1234 2019-05-31
  • 打赏
  • 举报
回复
go 语言里的空接口interface{}相当于其它语言里的基类型object

go 语言中规定,一个类型要给接口类型赋值,必须先实现接口里所有的方法,而空接口没有定义任何方法,那么就认为任何类型都实现了空接口,所以任何类型都可以给空接口interface{}赋值。
天外怪魔 2019-05-31
  • 打赏
  • 举报
回复
自己顶一下,请大家指点。
qybao 2019-05-31
  • 打赏
  • 举报
回复
go的 interface{}是个空接口(没有任何方法声明),它可以赋任意类型,所以 你可以把 interface{} 看成是任意类型

var a interface{}
var s string
var ok bool
a = "test" //string 类型
if s, ok = a.(string), ok { //强行转换为具体类型,转成功则ok为ture,否则false,也可以不check,转失败会抛出异常
fat.Printf("s=%s", s)
}

一是为什么可以这个一个方法都没有的interface?
这个是个空接口,没有任何方法,把它当作一种变量类型理解(任意类型)

二是genAction(act1._intput.(io.Writer),是特么几个意思?这里的_input后面()是表示调用吗?
这是类型强行转换,把interface{}类型的_intput转成io.Writer类型

2,348

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • 俺叫西西弗斯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧