结构体类型存储不同数据类型的变量,我们使用结构体变量来访问结构体的成员。
在 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,该变量初始化了结构体的成员;name
为 John
,age 为 25。
我们还创建了一个结构体类型的指针变量,它存储了 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。