目录
前言
1、定义结构体
2、访问结构体成员
3、结构体作为函数参数
4、结构体指针
前言
数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体表示一项纪录,比如班级的学生信息,每个人有以下属性:
Name:姓名
Sex:性别
Age:年龄
ID card :身份证
1、定义结构体
结构体定义需要使用 type 和 struct 语句。
type 语句设定了结构体名称。
struct 语句定义一个新的数据类型,结构体中有一个或多个成员。
语法格式:
var struct_variable_type struct {
member definition
member definition
...
member definition
}
一旦定义了结构体类型,它就能用于变量的声明,格式如下:
variable_name := struct_variable_type {value1, value2, ...valuen}
或
variable_name := struct_variable_type {key1:value1, key2:value2, ...keyn:valuen}
示例:
package main
import "fmt"
//定义结构体
func main() {
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
//按顺序进行初始化
fmt.Println("顺序初始化结构体:", Person{"zhangsan", "男", 18, 123456789})
//按键名赋值初始化
fmt.Println("按键名赋值结构体:", Person{name: "qianqi", sex: "女", age: 22, id_card: 324465992})
//部分属性赋值初始化
fmt.Println("部分赋值结构体:", Person{name: "laoba"})
}
//运行结果为:
顺序初始化结构体: {zhangsan 男 18 123456789}
按键名赋值结构体: {qianqi 女 22 324465992}
部分赋值结构体: {laoba 0 0}
2、访问结构体成员
要访问结构体成员,需要使用点号 . 操作符,格式为:
结构体.成员名
示例:
package main
import "fmt"
//定义结构体
func main() {
//结构体声明
type Person struct {
name string
sex string
age int
id_card int
}
//结构体类型的变量
var (
person1 Person
person2 Person
)
//给person1赋值
person1.name = "tom"
person1.sex = "man"
person1.age = 20
person1.id_card = 56151165
//给person2赋值
person2.name = "tianqi"
person2.sex = "nv"
person2.age = 18
person2.id_card = 88416516
fmt.Println(person1)
fmt.Println(person2)
}
//运行结果为:
{tom man 20 56151165}
{tianqi nv 18 88416516}
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 = 20
person1.id_card = 56151165
//给person2赋值
person2.name = "tianqi"
person2.sex = "nv"
person2.age = 18
person2.id_card = 88416516
//使用函数传参结构体类型数据
personIofo(person1)
personIofo(person2)
}
//函数定义结构体为形式参数进行传入
func personIofo(x Person) {
fmt.Println("姓名:", x.name)
fmt.Println("性别:", x.sex)
fmt.Println("年龄:", x.age)
fmt.Println("id:", x.id_card)
}
//运行结果为:
姓名: tom
性别: man
年龄: 20
id: 56151165
姓名: tianqi
性别: nv
年龄: 18
id: 88416516
4、结构体指针
可以定义结构体的指针类似于其他指针变量,格式如下:
var struct_pointer *Person
以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前。
struct_pointer = &Person
使用结构体指针访问结构体成员,使用点 . 操作符。
struct_pointer.title
示例:
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 = 20
person1.id_card = 56151165
//给person2赋值
person2.name = "tianqi"
person2.sex = "nv"
person2.age = 18
person2.id_card = 88416516
//使用函数传参结构体类型数据,传入地址值。
personIofo(&person1)
personIofo(&person2)
}
//函数定义结构体为形式参数进行传入。
func personIofo(p *Person) {
fmt.Println("姓名:", p.name)
fmt.Println("性别:", p.sex)
fmt.Println("年龄:", p.age)
fmt.Println("id:", p.id_card)
}
//运行结果为:
姓名: tom
性别: man
年龄: 20
id: 56151165
姓名: tianqi
性别: nv
年龄: 18
id: 88416516