Java转Go语言 -9

The way go to go 第十一章总结 接口(interface)与反射(reflection)

接口是什么
接口值=一个具体的类型(动态类型) 类型的值(动态值)这两部分组成
对于接口的零值,类型和值的部分都是nil
接口值本质是一个指针,但是指向接口值的指针是非法的。

var w io.Writer
w = os.Stdout
// 1)将*os.File类型的值给了w
w = new(bytes.Buffer)
// 2)*bytes.Buffer的值付给接口值
w = nil
// 3)这是把所有部分都给赋值为nil

1)等价于io.Writer(os.Stdout)
2)动态类型是*bytes.Buffer 动态值是一个指向新分配的缓冲区的指针

注意:
我个人觉得这本书这一部分讲的很难理解,即使查阅了很多相关资料也觉得很难理解。但是不光要学会怎么用还要知道为什么这样设计,而且是要学会动手编程(嘛 我自己的电脑坏了最近只能先看看了)。后来跟java比较一下就知道Go语言是怎么设计的了。
在Java中class继承interface(显示标注的)然后你这个class的实例对象都可以使用这个interface的方法。
但是在Go语言中,没有显示标注继承,而是采取了接受者的形式,刚刚从java转Go的话,就会觉得代码结构比较松散(这就好比把一个人的东西聚在一块和把这个人东西分散着标注属于他的区别);
Go语言中使用的时候有两个变量,第一个是这个接受者的变量,第二个是接口的变量。那么如何产生关系呢?

\\利用等式
接口变量=接受者变量

上述代码这样做的结果是接口变量中的接口值存放接受者变量,而动态类型则存放着指向接受者变量方法表的指针。
这样一联系,可以在接口变量上调用方法,也可以在接收者变量上调用方法

此处有一个问题:
我调用第一个之后,在调用第二个改变了之间的对应关系之后再调用第一个会怎么样?
看来完全不用产生关系,根据多态会自己选择。这种产生关系估计也是方便行事。

接口嵌套接口
接口可以包含一个或者多个其他的接口

类型断言:如何检测和转换接口变量的类型
这个就是刚刚考虑的,这个接口类型的变量中可能是和任何类型相联系的,所以在使用的时候如何确认这个值是你想使用的呢?就是要检测它的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值