4.1.結構體
結構體:將一個或多個變量組合到一塊兒造成新的類型,這個類型就是結構體,結構體是值類型函數
定義結構體和賦值spa
//Learn_Go/main.go package main import "fmt" type People struct { Name string Age int } func main() { var peo People fmt.Println(peo) //{ 0} fmt.Printf("%p",&peo) //0x110040f0 //賦值 //第一種 peo = People{"derek",20} fmt.Println(peo) //{derek 20} //第二種 peo2 := People{Age:12,Name:"jack"} fmt.Println(peo2) //{jack 12} //第三種 peo.Name = "alice" peo.Age = 25 fmt.Println(peo) //{alice 25} }
4.2.結構體指針
因爲結構體是值類型,在方法傳遞時但願傳遞結構體地址,能夠使用結構體指針完成指針
能夠結合new()函數建立結構體指針code
//Learn_Go/main.go package main import "fmt" type People struct { Name string Age int } func main() { peo := new(People) fmt.Println(peo) //&{ 0} fmt.Println(peo == nil) //false peo.Name = "derek" peo.Age = 22 fmt.Println(peo) //&{derek 22} peo2 := peo fmt.Println(peo2) //&{derek 22} peo2.Name = "Jack" fmt.Println(peo, peo2) //&{Jack 22} &{Jack 22} }
4.3.方法
方法和函數語法比較像,區別是函數屬於包,經過包調用函數,而方法屬於結構體,經過結構體變量調用blog
默認是函數,隸屬於包,因此須要添加標識,告訴編譯器這個方法屬於哪一個結構體 編譯器
(1)建立方法string
//Learn_Go/main.go package main import "fmt" type People struct { Name string Weight int } func (p People) run() { fmt.Println(p.Name,"正在跑步,當前體重爲:",p.Weight) } func main() { peo := People{"derek",120} peo.run() //derek 正在跑步,當前體重爲: 120 }
(2)修改值,用指針編譯
//Learn_Go/main.go package main import "fmt" type People struct { Name string Weight int } func (p *People) run() { fmt.Println(p.Name,"正在跑步,當前體重爲:",p.Weight) //運行一次run方法,體重減去1 p.Weight -= 1 } func main() { peo := People{"derek",120} peo.run() //derek 正在跑步,當前體重爲: 120 fmt.Println("跑完步後的體重爲:",peo.Weight) //跑完步後的體重爲: 119 }