Go基础---->go的基础学习(三)

  这里面我们简单的介绍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")
}

友情链接

原文地址:https://www.cnblogs.com/huhx/p/baseusego3.html