3. 面向对象编程


1 类型系统

 基础类型,如byte、int、bool、float等;
 复合类型,如数组、结构体、指针等;
 可以指向任意对象的类型(Any类型);
 值语义和引用语义;
 面向对象,即所有具备面向对象特征(比如成员方法)的类型;
 接口

1.1 为类型添加方法

type Integer int
func (a Integer) Less(b Integer) bool {
return a < b
}


1.2 值语义和引用语义

Go语言中的大多数类型都基于值语义,包括:
 基本类型,如byte、int、bool、float32、float64和string等;
 复合类型,如数组(array)、结构体(struct)和指针(pointer)等。
Go语言中类型的值语义表现得非常彻底。我们之所以这么说,是因为数组。


Go语言中有4个类型比较特别,看起来像引用类型
 数组切片:指向数组(array)的一个区间。
 map:极其常见的数据结构,提供键值查询能力。
 channel:执行体(goroutine)间的通信设施。
 接口(interface):对一组满足某个契约的类型的抽象。


1.3 结构体


所有的Go语言类型(指针类型除外)都可以有自己的方法
type Rect struct {
x, y float64
width, height float64
}

func (r *Rect) Area() float64 {
return r.width * r.height
}

2. 初始化

rect1 := new(Rect)
rect2 := &Rect{}
rect3 := &Rect{0, 0, 100, 200}
rect4 := &Rect{width: 100, height: 200}


3. 匿名组合

type Base struct {
Name string
}
func (base *Base) Foo() { ... }
func (base *Base) Bar() { ... }

type Foo struct {
Base
...
}
func (foo *Foo) Bar() {
foo.Base.Bar()
...
}


在“派生类”Foo没有改写“基类”Base的成员方法时,相应的方法就被“继承”,例如在
上面的例子中,调用foo.Foo()和调用foo.Base.Foo()效果一致。


4. 可见性


Go语言中符号的可访问性是包一级的而不是类型一级的


5. 接口

在Go语言中,只要两个接口拥有相同的方法列表(次序不同不要紧),那么它们就是等同的,可以相互赋值。



注意:接口查询、类型查询




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值