这里面我们简单的介绍go中面向对象编程的知识。
Go的面向对象编程
一、为类型添加方法
package main import "fmt" type Integer int // 面向对象 func (a Integer) Less(b Integer) bool { return a < b } // 面向过程 func Integer_Less(a Integer, b Integer) bool { return a < b } func main() { var a Integer = 1 if a.Less(2) { fmt.Println(a, "Less 2") // 1 Less 2 } if Integer_Less(a, 2) { fmt.Println(a, "Less 2") // 1 Less 2 } }
二、go中的函数传值问题
package main import "fmt" type Integer int func (a *Integer) Add1(b Integer) { *a += b } func (a Integer) Add2(b Integer) { a += b } func main() { var a, b Integer = 2, 7 a.Add2(b) fmt.Println(a, b) // 2, 7 a.Add1(b) fmt.Println(a, b) // 9, 7 }
Go语言中的大多数类型都基于值语义:
- 基本类型,如 byte、int、bool、float32、float64 和 string 等;
- 复合类型,如数组(array)、结构体(struct)和指针(pointer)等。
三、go中的结构休
package main import "fmt" type Rect struct { width, height float64 } func (r *Rect) Area() float64 { return r.width * r.height } func main() { // 创建的几种方式 rect1 := &Rect{100, 50} rect2 := &Rect{ 100, height: 200} rect3 := new(Rect) rect3.height, rect3.width = 90, 20 rect4 := &Rect{} rect4.height, rect4.width = 90, 20 fmt.Println(rect1.Area()) // 5000 fmt.Println(rect2.Area()) // 20000 fmt.Println(rect3.Area()) // 1800 fmt.Println(rect4.Area()) // 1800 }
四、go中的接口
由于Go语言中任何对象实例都满足空接口 interface{} ,所以 interface{} 看起来像是可以指向任何对象的 Any 类型。
package main import "fmt" // 定义一个接口Men type Men interface { sayHello() } type Sing interface { sing(name string) } // 接口的组合 type MenAndSing interface { Sing Men } type Human struct { name, address string age int } type Person struct { Human phone string } // Huamn实现了sayHello方法 func (human Human)sayHello() { fmt.Println("human say hello") } // Huamn实现了sing方法 func (human Human)sing(name string) { fmt.Println("human sing a song named ", name) } // Person重写方法 func (p Person)sayHello() { fmt.Println("Person say Hello") } func main() { mark := Human{"huhx", "address", 45} var men Men = mark men.sayHello() // var sing Sing = mark // 由于Human实现了Sing的sing方法 sing.sing("huhx") var men2 Men = Person{mark, "15527100207"} men2.sayHello() var menAdnstring MenAndSing = mark menAdnstring.sayHello() menAdnstring.sing("huhx") }