Go 指向 Struct 的指针

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

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

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


Go 指向结构体的指针

假设我们有这样的结构体:

type Person struct {
  name string
  age int
}

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

person1 := Person{"John", 25}

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

var ptr *Person

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

package main
import "fmt"

func main() {

  // declare a struct Person
  type Person struct {
    name string
    age int
  }

  // instance of the struct Person
  person1 := Person{"John", 25}

// create a struct type pointer that // stores the address of person1 var ptr *Person ptr = &person1
// print struct instance fmt.Println(person1) // print the struct type pointer fmt.Println(ptr) }

输出

{John 25}
&{John 25}

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

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

var ptr *Person
ptr = &person1

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

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

var ptr = &person1

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

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

// Program to access the field of a struct using pointer

package main
import "fmt"

func main() {

  // declare a struct Person
  type Person struct {
    name string
    age int
  }

  person := Person{"John", 25}

  // create a struct type pointer that
  // stores the address of person
  var ptr *Person
  ptr = &person

// access the name member fmt.Println("Name:", ptr.name) // access the age member 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 中的结构体成员

同样地,我们也可以使用指针变量和点运算符来更改结构体成员的值。例如:

// Program to change the struct member using pointer

package main
import "fmt"

// create struct
type Weather struct{
  city string
  temperature int
}   
    
func main() {

  // create struct variable
  weather := Weather{"California", 20}
  fmt.Println("Initial Weather:", weather)

  // create struct type pointer
  ptr := &weather

// change value of temperature to 25 ptr.temperature = 25
fmt.Println("Updated Weather:", weather) }

输出

Initial Weather: {California 20}
Updated Weather: {California 25}

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

ptr.temperature = 25

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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战