defer關鍵字
Go的内置函數
Go數組記憶體分析
Go的切片記憶體分析
Go用struct代替其他語言的class
結構體按引用傳遞
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方法和函數的差別
func hanshu(函數參數)(函數傳回值) { 函數體 }
func (t Type) fangfa(方法參數)(方法傳回值){ 方法體 }
方法的值傳遞和引用傳遞
1.方法中的結構體執行個體對象預設是值拷貝,在方法中對執行個體進行修改不會影響到原來的執行個體對象。如果需要在方法中對原對象進行修改,就必須傳遞指針類型的對象
跨包建立結構體執行個體
繼承
接口
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)
}
接口執行個體
多态