Go-结构体,结构体指针和方法
https://cloud.tencent.com/developer/article/1482382
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
}