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 }