天天看點

Go語言的面向對象

defer關鍵字

Go語言的面向對象
Go語言的面向對象

 Go的内置函數

Go語言的面向對象
Go語言的面向對象
Go語言的面向對象

        Go數組記憶體分析

Go語言的面向對象
Go語言的面向對象
Go語言的面向對象

       Go的切片記憶體分析

Go語言的面向對象
Go語言的面向對象
Go語言的面向對象
Go語言的面向對象

 Go用struct代替其他語言的class

Go語言的面向對象

         結構體按引用傳遞

Go語言的面向對象
Go語言的面向對象

    Go建立結構體執行個體的4種方式

        1. 第一種方式

             var t1 Teacher 

              t1.Name="a"

        2.第二種方式

             var t2 Teacher = Teacher{"Aaa",445,"asdfasdf"}

       3.第三種方式

            var t *Teacher = new(Teacher)   

            (*t).Name="name" 

             t.Age=100   簡寫,Go編譯器自動優化成*t

        4.第四種方式

             var t8 *Teacher = &Teacher{}

             t8.Name ="Abc"  Go編譯器自動優化成*t8

             t8.Age = 100

type Teacher struct{
    Name string
    Age int
    School string
}

func main(){

    //方式1
    var t1 Teacher = Teacher{}
    fmt.Println(t1)
    t1.Name = "zss"
    t1.Age =  32
  

  //方式2
  var t2 Teacher = Teacher{"abc",38,"ccc"}
  fmt.Println(t2)


  //方式3
  var t3 *Teacher = new(Teacher)
  (*t3).Name ="msb"
  (*t3).Age = 100
  fmt.Println(t3.Name)

  //方式4
  var t4 *Teacher = &Teacher{"name",100,"school"}
  fmt.Println(t4)
  fmt.Println(t4.Name)

}      
Go語言的面向對象

 Go方法和函數的差別

    func hanshu(函數參數)(函數傳回值) { 函數體 }

    func (t Type) fangfa(方法參數)(方法傳回值){  方法體 }

Go語言的面向對象

      方法的值傳遞和引用傳遞

         1.方法中的結構體執行個體對象預設是值拷貝,在方法中對執行個體進行修改不會影響到原來的執行個體對象。如果需要在方法中對原對象進行修改,就必須傳遞指針類型的對象

Go語言的面向對象
Go語言的面向對象

       跨包建立結構體執行個體

Go語言的面向對象

       繼承

Go語言的面向對象
Go語言的面向對象

       接口

Go語言的面向對象
Go語言的面向對象
package main
import "fmt"

//接口定義
type SayHello interface{
    //聲明沒有實作的方法
    sayHello()
}

//接口的實作類
type Chinese struct{}
//實作接口的方法
func (person Chinese) sayHello(){
    fmt.Println("你好")
}

//接口的實作類
type American struct{}
//實作接口的方法
func (person American) sayHello(){
    fmt.Println("hello man")
}


//定義函數,接收接口結構體執行個體
func greet(s SayHello){
   s.sayHello()
}

func main(){
  c := Chinese{}
  m := American{}

  greet(c)
  greet(m)
}      

接口執行個體

Go語言的面向對象

       多态

Go語言的面向對象

繼續閱讀