基本语法: type 名字 interface{}
什么是接口?:接口是一组行为的抽象
原则上任务:即便是任务开发,也应该面向接口编程
当你怀疑要不要定义接口的时候,加上去。
gotype Name struct{
fieldName FieldType
//....
}
结构体和结构体的字段都遵循大小写控制访问性的原则。
通过. 这个符号来访问字段或者方法。
new可理解为Go会为你的变量分配内存,并且把内存都置为0.
有两种形态:
go的指针和别的语言的概念一样,本质上都是一个内存地址。
一个方法可以定义在这个结构体上,也可以定义在这个结构体的指针上。
前者叫做结构体接收器,后者叫做指针接收器。
结构体接收器内部修改字段,不会生效。因为方法调用本身是值传递的。
目前没有统一的说法什么时候用什么接收器,你在初学的时候:遇事不决用指针。
也就是:
如果在结构体内部还要引用自身,那么只能使用指针。
准确来说,在整个引用链上,如果构成循环,那就只能用指针。
如果引用链路很长,你比较难发现这种错误。
我一般在想使用第三方库,又没有办法修改远吗,又想扩展整个库的结构体的方法的情况下,就用这个。
记住衍生核心:衍生类型是一个全新的类型。
衍生类型可以互相转换,使用()进行转换
注意:typeB实现了某个接口,不等于TypeA也实现了某个接口
类型别名一般用在导出类型、兼容性修改里面,也不常见。
当看到某个东西走起来像鸭子、有勇气来像鸭子、饺子来也像鸭子,那么这个东西就被称为鸭子。
当一个结构体具备的接口的所有方法的时候,他就实现了这个接口。
组合是go里面独有的语法概念,基本语法形态是:
gotype A struct{
B
}
组合可以是以下几种情况:
可以组合多个。
当A组合了B之后
A组合B之后,在初始化A的时候将B看做普通字段来初始化
组合不是继承,没有多态
右边的例子输出什么?
本文作者:Eric
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!