概述
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
定义
定义结构体需要使用 type 和 struct 语句。
type 语句设定了结构体的名称。 struct 语句定义一个新的数据类型,结构体中有一个或多个成员。
package main
import "fmt"
type People struct {
Id uint
Name string
Address string
}
func main() {
//1. 按顺序赋值
p1 := People{1, "Jim", "Beijing"}
fmt.Println(p1) //{1 Jim Beijing}
//2. 使用 key => value 格式
p2 := People{Id: 2, Name: "Tom", Address: "Shanghai"}
fmt.Println(p2) //{2 Tom Shanghai}
//3. 指定部分字段,未设置为0值
p3 := People{Id: 3, Name: "Jack"}
fmt.Println(p3) //{3 Jack }
}
访问
package main
import "fmt"
// 1. 定义结构体
type People struct {
Id uint
Name string
Address string
}
func main() {
//2. 声明
var p1 People
//3. 赋值
p1.Id = 1
p1.Name = "Jim"
p1.Address = "Beijing"
//4. 访问
fmt.Printf("p1's Id: %d\n", p1.Id) //p1's Id: 1
fmt.Printf("p1's Name: %s\n", p1.Name) //p1's Name: Jim
fmt.Printf("p1's Address: %s\n", p1.Address) //p1's Address: Beijing
}
结构体作为函数参数,结构体是值传递
package main
import "fmt"
type People struct {
Id uint
Name string
Address string
}
func print(p People) {
fmt.Printf("id:%d, name:%s, address:%s\n", p.Id, p.Name, p.Address)
}
func updateAddress(p People) {
p.Address = "Shanghai"
}
func main() {
var p1 People
p1.Id = 1
p1.Name = "Jim"
p1.Address = "Beijing"
print(p1) //id:1, name:Jim, address:Beijing
updateAddress(p1)
print(p1) //id:1, name:Jim, address:Beijing
}
结构体指针
package main
import "fmt"
type People struct {
Id uint
Name string
Address string
}
func print(p *People) {
fmt.Printf("id:%d, name:%s, address:%s\n", p.Id, p.Name, p.Address)
}
func updateAddress(p *People) {
p.Address = "Shanghai"
}
func main() {
var p1 People
p1.Id = 1
p1.Name = "Jim"
p1.Address = "Beijing"
// 传递结构体指针
print(&p1) //id:1, name:Jim, address:Beijing
updateAddress(&p1)
print(&p1) //id:1, name:Jim, address:Shanghai
}