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 }

猜你喜欢

转载自www.cnblogs.com/bbllw/p/11932113.html