结构体
简介
go语言中的结构体给我的感觉就是就是和c语言中的结构体很像。但是go语言中没有类
在结构体中我们可以为不同项定义不同的数据类型。
结构体的定义就是:“结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。”
结构体的基本使用
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
例如
type Person struct {
name string
age string
sex string
address string
}
初始化的四种方法
//方法一
var p1 Person
p1.name = "p1"
p1.age = 1
p1.sex = "不明"
p1.address = "不知道"
fmt.Println(p1)
//方法二
p2:=Person{}
p2.name = "p2"
p2.sex = "不明"
p2.age = 2
p2.address = "address2"
//方法三
p3:=Person{"p3",3,"不明","adress3"}
fmt.Println(p3)
//方法四
p4:=Person{
name:"p4",
age:4,
sex:"不明",
address: "address4",
}
fmt.Println(p4)
调用结构体数据
基本上就是:结构体名.数据名
fmt.Println(Person.address)
结构体指针
和其他类型的指针的定义一样,就是指针指向结构体
例如()
var struct_pointer *Person
只是类型变为结构体指针类型
使用也是一样的
例如
var p *Person
p = &p1
fmt.Println("使用指针调用结构体",p)
结构体的匿名字段
类似于java中的继承关系(虽然go语言中没有类)
具体看代码
例如
type Human struct {
s1 string
s2 int
s3 int
}
type Student struct {
Human // 这就是匿名字段,那么默认Student就包含了Human的所有字段
s4 string
}
调用匿名字段的时候,就和调用结构体的其他字段一样
使用"."进行调用匿名字段中的属性值
实际就是字段的继承
结构体的嵌套
就是把其他的结构体作为结构体的属性
例如
type Address struct {
city, state string
}
type Person struct {
name string
age int
//把其他的结构体作为属性
address Address
}
这样的话在调用结构体中的结构体属性的时候就需要先调用结构体属性,再调用结构体中的属性
例如
fmt.Println(p.address.city)
就是和c语言里的一样