📅  最后修改于: 2023-12-03 15:01:02.195000             🧑  作者: Mango
在 Go 语言中,结构(Struct)是一种用户自定义的数据类型,它可以包含不同的属性(也称为字段),这些属性可以是基本数据类型、数组、结构等等。本文将为您介绍 Golang 中的结构体定义、实例化、匿名结构体、嵌套结构体等相关知识点。
在 Golang 中,使用 type
关键字来定义结构体,具体语法如下:
type structName struct {
field1 datatype1
field2 datatype2
...
}
其中,structName
表示结构体的名称,field
表示结构体的属性名称,datatype
表示属性的数据类型。例如,下面定义了一个名为 Person 的结构体,包含了名字和年龄两个属性:
type Person struct {
name string
age int
}
结构体定义好之后,需要实例化才能使用。实例化结构体的方式有多种,最常见的是使用 new
关键字或花括号 {}
,下面分别介绍。
使用 new
关键字可以创建一个结构体实例,并返回该结构体实例的指针。例如,创建一个名为 p 的 Person 结构体实例,可以使用下面的语句:
p := new(Person)
这样创建出来的 p 是一个指向 Person 类型的指针,它指向的存储区域已经被分配,但是其中的字段都是默认值:
fmt.Printf("%+v", p) // 输出:&{name: age:0}
花括号实例化结构体是将结构体中的属性值直接写入花括号中,创建一个结构体实例。例如,使用花括号创建一个名为 p2 的 Person 结构体实例,可以使用下面的语句:
p2 := Person{name: "Alice", age: 18}
这样创建出来的 p2 中的 name 属性为 Alice,age 属性为 18:
fmt.Printf("%+v", p2) // 输出:{name:Alice age:18}
当我们只需要使用一次的结构体时,可以使用匿名结构体。匿名结构体是没有名字的结构体,它的类型只能在当前代码块中被使用。例如,下面的语句创建了一个匿名结构体,并直接输出其中的字段:
fmt.Printf("%+v", struct{ name string; age int }{name: "Bob", age: 20}) // 输出:{name:Bob age:20}
这里定义了一个包含 name 和 age 两个字段的匿名结构体,并且直接在花括号中初始化了它们的值。
可以在结构体中嵌套其他结构体,这样就可以实现更复杂的数据结构。例如,下面的代码定义了一个名为 Teacher 的结构体,它包含了一个名为 Person 的结构体,以及一个 subject 字段。
type Teacher struct {
p Person
subject string
}
这样可以使用点号(.
)来访问 Teacher 结构体中的 Person 结构体中的属性,例如:
t := Teacher{p: Person{name: "Caroline", age: 30}, subject: "Math"}
fmt.Println(t.p.name) // 输出:Caroline
本文介绍了 Golang 中结构体的定义、实例化、匿名结构体、嵌套结构体等相关知识点。结构体在 Golang 中是非常重要的数据类型,能够实现存储复杂数据的目的。