1 类型系统
1.1给类型添加方法
// 为类型添加方法 type Integer int // 定义一个新类型Integer, 它与int类型相同 func (a Integer) Less(b Integer) bool { // 给Integer类型添加新方法 less, less 方法输入一个整数,返回布尔值 return a < b // 当前整数a调用less方法要传入一个整数b, 如果a<b,返回true }
如果我们想在方法中修改对象,这种时候必须就要用到指针
func (a *Integer) Add (b Integer) { *a += b } func main() { a := Integer(10) a.Add(5) fmt.Println("a is : ", a) }
1.2 值语义和引用语义
b = a b.Modyfy() // 如果a的值收到影响则a为引用类型,否则为值类型
值类型的数据:
- 基本数据类型
- 符合类型: 数组, 结构体, 指针
// 数组想表达引用 var a = [3]int{1,2,3} var b = &a b[1]++ fmt.Println(a, *b)
类似引用类型的数据:
- 数组切片 : 指向数组的一个区间
- map : 键值对
- channel : 执行体间的通信设施
- 接口 : 对一组满足某个契约的类型的抽象
1.3 结构体
定义矩阵类型
type Rect struct {。 // 定义矩形类型 x, y float64 width, height float64 } func (r *Rect) Area() float64{ //定义成员方法计算矩形面积 return r.width * r.height }
2. 初始化
初始化Rect类型的实例
rect1 := new(Rect) rect2 := &Rect{} rect3 := &Rect{0, 0, 100, 200} rect4 := {width:100, height:200}
3 匿名组合
type Base struct { // 定义Base类 Name string } func (base *Base) Par() { // Base类实现Par方法和Run方法 fmt.Println("par in Base") } func (base *Base) Run() { fmt.Println("run in base") } type Foo struct { // Foo类继承Base类 Base } func (foo *Foo) Run() { // Foo类重写Run方法,先执行Base的Run方法在执行自己的代码 foo.Base.Run() fmt.Println("run in foo") } func main() { foo := new(Foo) // 实例化一个foo对象,该对象有继承自父类的Par方法和自己的Run方法 foo.Par() foo.Run() }
来源:https://www.cnblogs.com/zhangjian0092/p/12358209.html