跳到主要内容

Go 结构体指针

提示
  1. Structs and Pointers in Go: Structs in Go can store variables of different data types, and pointers can be created to these struct types.
  2. Accessing and Modifying Struct Members: Struct members can be accessed and modified using pointers, employing both dot and dereference operators.
  3. Example and Usage: Examples demonstrate creating struct variables, assigning addresses to pointer variables, and accessing or modifying struct members via pointers.

结构体类型存储不同数据类型的变量,我们使用结构体变量来访问结构体的成员。

在 Go 中,我们也可以创建结构体类型的指针变量。

在学习结构体指针之前,请确保了解:

Go 结构体指针

假设我们有这样一个结构体

type Person struct {
name string
age int
}

现在,让我们创建一个 Person 类型的结构体变量。

person1 := Person{"John", 25}

类似地,我们也可以创建结构体类型的指针变量。

var ptr *Person

我们现在可以将结构体变量的地址赋给这个指针变量。让我们看一个例子。

package main
import "fmt"

func main() {

// 声明一个结构体 Person
type Person struct {
name string
age int
}

// 结构体 Person 的实例
person1 := Person{"John", 25}

// 创建一个存储 person1 地址的
// 结构体类型指针
var ptr *Person
ptr = &person1

// 打印结构体实例
fmt.Println(person1)

// 打印结构体类型指针
fmt.Println(ptr)

}

输出

{John 25}
&{John 25}

在上述示例中,我们创建了一个结构体变量 person1,并初始化了结构体成员;nameJohnage25

我们还创建了一个存储 person1 地址的结构体类型的指针变量。

var ptr *Person
ptr = &person1

由于 ptr 现在存储了 person1 的地址,因此在打印 ptr 时输出 &{John 25}

注意:我们也可以在同一行中创建结构体类型的指针并分配变量地址。例如,

var ptr = &person1

在 Golang 中使用指针访问结构体

我们也可以使用指针访问结构体的单个成员。例如,

// 使用指针访问结构体字段的程序

package main
import "fmt"

func main() {

// 声明一个结构体 Person
type Person struct {
name string
age int
}

person := Person{"John", 25}

// 创建一个存储 person 地址的
// 结构体类型指针
var ptr *Person
ptr = &person

// 访问 name 成员
fmt.Println("Name:", ptr.name)

// 访问 age 成员
fmt.Println("Age:", ptr.age)

}

输出

Name: John
Age: 25

在上述示例中,我们使用结构体类型的指针来访问结构体成员:

  • ptr.name - 获取 name 成员的值
  • ptr.age - 获取 age 成员的值

这里,我们使用点操作符来使用指针访问结构体成员。

注意:我们也可以使用解引用操作符 * 来访问结构体的成员。例如,

fmt.Println(ptr.name) // John
fmt.Println((*ptr).name) // John

在 Go 中更改结构体成员

类似地,我们也可以使用指针变量和点操作符来更改结构体成员的值。例如,

// 使用指针更改结构体成员的程序

package main
import "fmt"

// 创建结构体
type Weather struct{
city string
temperature int
}

func main() {

// 创建结构体变量
weather := Weather{"California", 20}
fmt.Println("初始天气:", weather)

// 创建结构体类型指针
ptr := &weather

// 将 temperature 的值更改为 25
ptr.temperature = 25

fmt.Println("更新后的天气:", weather)

}

输出

初始天气: {California 20}
更新后的天气: {California 25}

在上述示例中,请注意这一行

ptr.temperature = 25

这里,我们使用指针变量 ptr 将结构体成员 temperature 的值更改为 25