目录
结构体是值类型
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
1、定义结构体
结构体定义需要使用type
和 struct
语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。
示例
package main
import "fmt"
func main() {
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
//按顺序进行初始化
fmt.Println("顺序初始化", Person{"oyyy", "女", 18, 1889})
fmt.Println("按键名赋值结构体:", Person{name: "oyyy", sex: "女", id_card: 01, age: 18}
fmt.Println("按键名赋值结构体:", Person{name: "oyyy"})
}
##
顺序初始化 {oyyy 女 18 1889}
按键名赋值结构体: {oyyy 女 18 1}
按键名赋值结构体: {oyyy 0 0}
2、访问结构体成员
如果要访问结构体成员,需要使用点号 . 操作符,格式为:
结构体.成员名
示例
package main
import "fmt"
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
func main() {
var (
Person1 Person
Person2 Person
)
//按顺序进行初始化
Person1.name = "tom"
Person1.sex = "男"
Person2.age = 10
Person2.id_card = 11
fmt.Println(Person1)
fmt.Println(Person2)
}
package main
import "fmt"
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
func main() {
var (
Person1 Person
Person2 Person
)
//按顺序进行初始化
Person1.name = "tom"
Person1.sex = "男"
Person2.age = 10
Person2.id_card = 11
fmt.Println(Person1)
fmt.Println(Person2)
}
##
{tom 男 0 0}
{ 10 11}
3、结构体作为函数参数
可以像其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问结构体变
package main
import "fmt"
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
/*结构体定义*/
func main() {
//结构体类型的变量
var (
person1 Person
person2 Person
)
//给person1赋值
person1.name = "tom"
person1.sex = "man"
person1.age = 30
person1.id_card = 123456
//给person2赋值
person2.name = "jerry"
person2.sex = "man"
person2.age = 25
person2.id_card = 654321
//使用函数传参结构体类型数据
printInfo(person1)
printInfo(person2)
}
//函数定义结构体为形式参数进行传入
func printInfo(per Person) {
fmt.Println("姓名:", per.name)
fmt.Println("性别:", per.sex)
fmt.Println("年龄", per.age)
fmt.Println("id", per.id_card)
}
##
姓名: tom
性别: man
年龄 30
id 123456
姓名: jerry
性别: man
年龄 25
id 654321
4、结构体指针
定义指向结构体的指针类似于其他指针变量,格式如下:
var struct_pointer *Books
以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:
struct_pointer = &Book1
使用结构体指针访问结构体成员,使用 "." 操作符:
struct_pointer.title
示例
package main
import "fmt"
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
/*结构体定义*/
func main() {
//结构体类型的变量
var (
person1 Person
)
//给person1赋值
person1.name = "tom"
person1.sex = "man"
person1.age = 30
person1.id_card = 123456
fmt.Println("处理前:", person1)
updateInfo(&person1)
fmt.Println("处理后:", person1)
}
//函数定义结构体为形式参数进行传入
func updateInfo(per *Person) {
per.name = "jack"
}
##
处理前: {tom man 30 123456}
处理后: {jack man 30 123456}