4.1.結構體 結構體:講一個或多個變數組合到一起形成新的類型,這個類型就是結構體,結構體是值類型 定義結構體和賦值 4.2.結構體指針 由於結構體是值類型,在方法傳遞時希望傳遞結構體地址,可以使用結構體指針完成 可以結合new()函數創建結構體指針 4.3.方法 方法和函數語法比較像,區別是函數屬 ...
4.1.結構體
結構體:講一個或多個變數組合到一起形成新的類型,這個類型就是結構體,結構體是值類型
定義結構體和賦值
//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()函數創建結構體指針
//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.方法
方法和函數語法比較像,區別是函數屬於包,通過包調用函數,而方法屬於結構體,通過結構體變數調用
預設是函數,隸屬於包,所以需要添加標識,告訴編譯器這個方法屬於哪個結構體
(1)創建方法
//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 }