跳到主要内容

Go语言结构体

提示
  1. 定义和使用结构体:结构体(Struct)是 Go 语言中一种用于存储不同数据类型变量的复合数据类型。结构体可以包含多个不同类型的字段,并通过 struct 关键字进行定义。
  2. 结构体实例的创建和访问:结构体定义本身只是一个蓝图,实际使用时需要创建其实例。结构体实例可以通过点(.)运算符访问其各个字段。
  3. 结构体内部的函数:Go 允许在结构体内部定义函数作为字段,这些函数可以操作结构体的其他字段或执行特定操作。

结构体用于存储不同数据类型的变量。例如,

假设我们想存储一个人的名字和年龄。我们可以创建两个变量:name 和 age,并存储值。

但是,假设我们想存储多个人的相同信息。

在这种情况下,为一个人创建变量可能是一项繁琐的任务。我们可以创建一个结构体,用来存储名字和年龄,以克服这个问题。

并且,我们可以对每个人使用同一个结构体。

声明 Go 结构体

在 Go 中声明结构体的语法是:

type StructureName struct {
// 结构体定义
}

这里,

  1. struct - 用于定义结构的关键字
  2. 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 的一个字段,并使用该函数计算了矩形的面积。