面向对象编程应用
步骤:
- 1.声明(定义)结构体,确定结构体名
- 2.编写结构体的字段 -3.编写结构体的方法
alter KEYSPACE system_auth WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true;
CREATE KEYSPACE eo_chatmsg WITH replication = {'class': 'NetworkTopologyStrategy','datacenter1': '3'} AND durable_writes = true;
2、工厂模式
golang 的结构体没有构造函数,通常使用工厂模式解决这个问题。
3、抽象(编程的思维方式)
定义一个结构体的时候,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模板(结构体)。这种研究问题的方法成为抽象。
4、oop的三大特性
封装:把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其他包只有通过被授权的操作(方法),才能对字段操作。
封装体现:对结构体中的属性进行封装;通过方法、包实现封装
继承:extends,利用匿名结构体实现继承特性。
嵌套匿名结构体的基本语法: ``` tyep Goods struct{ Name string Price float64 }
type Book struct{
Goods //嵌套匿名结构体Goods
Writer string
}
//访问 book :=Booke{} book.Goods.Name= "" //简化:book.Name = "", book会(就近原则)先去Book结构体中找Name,如果不存在则去Goods结构体去找。 ```
如果一个struct 嵌套一个有名结构体,这个模式就是组合,如果是组合关系,那么在访问组合的结构体的字段或方法时,必须带上结构体的名字。
type A struct{
Name string
}
type B struct{
a A
}
var b B
b.a.name = ""
匿名字段
//匿名字段的使用
type NM struct{
Goods
int //匿名字段 int类型的匿名字段不能重复出现,只能出现一次int类型的匿名子弹
}
var nm NM
nm.int = 110 //匿名字段,可以直接使用使用字段类型 ;
fmt.Println(nm.int)
接口:
接口语法:
type 接口名 interface{
method1(参数列表) 返回类型列表
method2(参数列表) 返回类型列表
....
}
实现结构所有方法:
func(t 自定义类型) medol1(参数列表) 返回值列表{
//方法实现
}
func(t 自定义类型) medol2(参数列表) 返回值列表{
//方法实现
}
使用细节:
- 1.interface不能包含任何变量;
- 2.interface里所有方法都没有方法体
- 3.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)
- 4.一个自定义类型只有实现了某个接口,才能将该自定义的实例(变量)赋值给接口类型
- 5.只要是自定义数据类型,就可以实现接口,不仅是结构体类型。
- 6.一个自定义类型可以实现多个接口
- 7.一个接口(A接口)可以继承多个别的接口(比如B、C接口),这时如果要实现A接口,也必须将B、C接口的方法全部实现。
- 8.interface类型默认是一个指针,引用类型。如果没有对interface初始化就使用,那么会输出nil
- 9.空接口interface{}没有任何方法,所以所有类型都实现了空接口(即可以把任何一个变量赋值给空接口)
接口的价值:
- 1.解决代码的复用性和可维护性
- 2.设计,设计好规范(方法),让其他自定义类型去实现这些方法。
接口比继承灵活,继承是满足 is-a的关系,而接口是满足like-a的关系
多态:
变量(实例)具有多种形态。go语言中,多态特性是通过接口实现的。可以按照统一的接口调用不同的实现,这时接口变量就呈现不同形态。
多态参数:
多态数组:
5、类型 断言 assert
类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言。