结构体是由一系列具有相同类型或不同类型的数据构成的数据集合
在golang结构体可以为不同项定义不同的数据类型
1.结构体格式:
type struct_variable_type struct {
member definition
member definition
...
member definition
}
2.变量声明:
variable_name := structure_variable_type {value1, value2...valuen}
或
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
代码示例:
package main
import "fmt"
//结构体定义
type Student struct{
name string
age int
height int
}
func main() {
// 创建一个新的结构体
x1 :=Student{"Tom",18,182}
fmt.Println(x1)
//可以用key:value形式
x2 :=Student{name:"Bob",age:14,height:152}
fmt.Println(x2)
//没有定义的字段为“空值”
x3 :=Student{}
fmt.Println(x3)
}
运行结果为:
{Tom 18 182}
{Bob 14 152}
{ 0 0}
3.创建结构体实例
type apple struct {
}
p = apple{}:这是一种使用结构体字面量创建apple类型的实例的方式。通过在大括号内提供适当的字段值,可以初始化结构体的字段。这种方式在创建结构体实例时直接返回该实例的值,可以直接使用该值,而不需要通过指针来访问。
package main
type apple struct {
}
func main() {
p := apple{} // 创建一个apple类型的实例
// 可以直接使用p
}
p = new(apple):这是使用new关键字创建指向apple类型的指针的方式。new函数会为指定的类型分配内存,并返回一个指向该内存的指针。这种方式创建的是指向apple类型实例的指针,需要通过解引用操作符*来访问实例的字段。
package main
type apple struct {
}
func main() {
p := new(apple) // 创建一个指向apple类型的指针
// 需要使用*p来访问apple实例
}
因此,主要的区别在于p = apple{}创建的是结构体实例的值,而p = new(apple)创建的是指向结构体实例的指针。根据您的需求和使用场景,您可以选择适当的方式来创建和操作apple类型的实例。
访问结构体成员
结构体.成员名称
不仅可以访问结构体成员,还可以重新赋值
package main
import "fmt"
//结构体定义
type Student struct{
name string
age int
height int
}
func main() {
// 创建一个新的结构体
x1 :=Student{"Tom",18,182}
fmt.Println(x1)
fmt.Println(x1.name)
fmt.Println(x1.age)
fmt.Println(x1.height)
x1.name="Bob"
x1.age=22
x1.height=176
fmt.Println("After change!")
fmt.Println(x1)
fmt.Println(x1.name)
fmt.Println(x1.age)
fmt.Println(x1.height)
}
运行结果为:
{Tom 18 182}
Tom
18
182
After change!
{Bob 22 176}
Bob
22
176
结构体作为函数参数
像其他数据类型一样,将结构体类型作为参数传递给函数,访问它的成员
package main
import "fmt"
//结构体定义
type Student struct{
name string
age int
height int
}
func main() {
var xx Student
xx.name="Lili"
xx.age=17
xx.height=165
showstruct(xx)
}
func showstruct(stu Student){
fmt.Println(stu)
fmt.Println(stu.name)
fmt.Println(stu.age)
fmt.Println(stu.height)
}
运行结果为:
{Lili 17 165}
Lili
17
165
结构体指针
定义指向结构体的指针:
package main
import "fmt"
//结构体定义
type Student struct{
name string
age int
height int
}
func main() {
xx :=Student{"Bob",17,178}
var stu *Student
stu=&xx
fmt.Println(xx)
fmt.Println(*stu)
fmt.Println(stu.name)
fmt.Println(stu.age)
fmt.Println(stu.height)
}
运行结果为:
{Bob 17 178}
{Bob 17 178}
Bob
17
178
结构体指针作为函数参数:
package main
import "fmt"
//结构体定义
type Student struct{
name string
age int
height int
}
func main() {
xx :=Student{"Bob",17,178}
showstruct(&xx)
}
func showstruct(stu *Student){
fmt.Println(*stu)
fmt.Println(stu.name)
fmt.Println(stu.age)
fmt.Println(stu.height)
}
运行结果为:
{Bob 17 178}
Bob
17
178