Java转Go语言 -10

接着第九部分总结

类型判断:type-switch
处理来自外部的,类型未知的数据时,比如解析XML或者JSON编码的数据,类型测试和转换很有用。

测试一个值是否实现了某个接口
1)在Go语言中 接口将类型能做什么和如何做分离开来,这就是多态的本质
2)注意 这里的说法,测试 (一个值)是否实现了某个接口,并不是某个对象

使用方法集与接口
作用于变量上的方法实际上是不区分变量到底是指针还是值
1)指针方法可以通过指针调用
2)值方法可以通过值调用
3)接收者是值的方法可以通过指针调用,因为指针会首先被解引用
4)接收者是指针的方法不可以通过值调用,因为存储在接口中的值没有地址

第一个例子:使用Sorter接口排序
这个就显示出了多态,冒泡排序针对不同的数据类型,但是数据类型要实现三个通用的方法,就可以抽出一个接口,然后具体类型具体分析。
第二个例子:读和写
使用接口,让程序更加通用

空接口
1) 概念:
就相当于Java中的基类 Object
2)构建通用类型或包含不同类型变量的数组:
就是使用空接口,这样使得程序更加普遍化。
3)复制数据切片至空接口切片:
内存中国的布局是不一样的,所以只能够一个个赋值
4)通用类型的节点数据结构:
5)接口到接口:
只要底层实现了必要的方法。

总结:
这个空指针给我的感觉就像是Java中的泛式。

反射包
1)犯法和类型的反射:
反射是通过检查一个接口的值,变量首先被转换成空接口。
2)通过反射修改值
注意:
并不是所有的值都是可以设置的,需要首先确认是否可设置(CanSet方法)
当然是要引用传递才能修改到本体的值,在Go中动态修改值即很复杂又很危险

Printf和反射
Printf就是利用反射来分析它的…的参数
其实感觉原理挺简单的

接口与动态类型:

  1. Go中数据和方法是一种松耦合的正交关系
  2. Go里面含有静态类型检查和运行时动态转换,并且不需要显式声明(这样允许我们在不改变已有代码的情况下定义和使用新接口)
  3. 第二点的衍生:不用提前设计出所有的接口,整个设计可以持续演进,而不用飞起之前的决定
  4. 也存在显式声明继承,接口中增加一个具有描述性名字的方法 hhh
  5. …空接口,这样的话 就实现了重载的含义
  6. 接口也有继承,本质上是一个多重继承

Go中的面向对象
封装: 简化成了2层(大概是由于包是基本结构的原因)
继承: 内嵌 多重继承
多态:用接口实现:某个类型的实例可以赋给它所实现的任意接口类型的变量。类型和接口是松耦合的,并且多重继承可以通过实现多个接口实现。Go 接口不是 Java 和 C# 接口的变体,而且接口间是不相关的,并且是大规模编程和可适应的演进型设计的关键。

结构体,集合和高阶函数
定义:高阶函数就是在函数的形参或者返回值中存在一个函数类型,这个就是高阶函数。
作用:部分逻辑动态生成,不用写死。
用处:往往和闭包一块使用。

这个蛮有意思的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值