Go语言结构体
提示
- 定义和使用结构体:结构体(Struct)是 Go 语言中一种用于存储不同数据类型变量的复合数据类型。结构体可以包含多个不同类型的字段,并通过
struct
关键字进行定义。 - 结构体实例的创建和访问:结构体定义本身只是一个蓝图,实际使用时需要创建其实例。结构体实例可以通过点(
.
)运算符访问其各个字段。 - 结构体内部的函数:Go 允许在结构体内部定义函数作为字段,这些函数可以操作结构体的其他字段或执行特定操作。
结构体用于存储不同数据类型的变量。例如,
假设我们想存储一个人的名字和年龄。我们可以创建两个变量:name 和 age,并存储值。
但是,假设我们想存储多个人的相同信息。
在这种情况下,为一个人创建变量可能是一项繁琐的任务。我们可以创建一个结构体,用来存储名字和年龄,以克服这个问题。
并且,我们可以对每个人使用同一个结构体。
声明 Go 结构体
在 Go 中声明结构体的语法是:
type StructureName struct {
// 结构体定义
}
这里,
struct
- 用于定义结构的关键字StructureName
- 结构体的名称
让我们看一个例子,
type Person struct {
name string
age int
}
这里,我们声明了一个名为 Person 的结构体。在大括号 {}
内部,该结构体包含了两个变量 name 和 age。
结构体实例
结构体定义只是一个蓝图。要使用结构体,我们需要创建它的一个实例。例如,
type Person struct {
name string
age int
}
// 创建结构体实例
var person1 Person
这里,我们创建了一个实例 person1
,后面跟着结构体的名称 Person
。
现在,我们可以使用 person1 实例来访问和定义结构体属性。
// 定义 name 和 age 的值
person1 = Person("John", 25)
我们也可以在创建结构体实例的同时直接定义它。例如,
person1 := Person("John", 25)
这里,John 将被赋值给名字变量,25 将被赋值给年龄变量。
例子:Golang 结构体
package main
import "fmt"
func main() {
// 声明结构体
type Person struct {
name string
age int
}
// 在创建实例时给结构体赋值
person1 := Person{ "John", 25}
fmt.Println(person1)
// 定义实例
var person2 Person
// 为结构体变量赋值
person2 = Person {
name: "Sara",
age: 29,
}
fmt.Println(person2)
}
输出
{John 25}
{Sara 29}
在 Golang 中访问结构体
我们可以使用结构体实例来访问结构体的单个元素。例如,
// 程序访问结构体的单个元素
package main
import "fmt"
func main() {
// 声明结构体
type Rectangle struct {
length int
breadth int
}
// 声明实例 rect1 并定义结构体
rect := Rectangle{22, 12}
// 访问结构体的长度
fmt.Println("Length:", rect.length)
// 访问结构体的宽度
fmt.Println("Breadth:", rect.breadth)
area := rect.length * rect.breadth
fmt.Println("Area:", area)
}
输出
Length: 22
Breadth: 12
Area: 264
在这里,我们使用了 .
(点)符号来访问结构体的属性。
rect.length
- 访问结构体中长度变量的值rect.breadth
- 访问结构体中宽度变量的值
Go 中结构体内的函数
Go 也允许我们在结构体内创建函数。它将函数视为结构体的一个字段。例如,
// 程序使用函数作为结构体的字段
package main
import "fmt"
// 初始化函数 Rectangle
type Rectangle func(int, int) int
// 创建结构体
type rectanglePara struct {
length int
breadth int
color string
// 函数作为结构体的字段
rect Rectangle
}
func main() {
// 为结构体变量赋值
result := rectanglePara{
length: 10,
breadth: 20,
color: "Red",
rect: func(length int, breadth int) int {
return length * breadth
},
}
fmt.Println("Rectangle 的颜色: ", result.color)
fmt.Println("Rectangle 的面积: ", result.rect(result.length, result.breadth))
}
输出
Rectangle 的颜色: Red
Rectangle 的面积: 200
在上面的例子中,我们定义了一个函数 Rectangle 作为结构体 rectanglePara 的一个字段,并使用该函数计算了矩形的面积。