演示了在实际应用场景中使用指针类型和结构体类型变量的差别:
package main
import (
"fmt"
)
type Person struct {
Name string
Age int
}
// 使用指针类型修改结构体字段
func modifyPersonByPointer(p *Person) {
p.Name = "Alice"
p.Age = 30
}
// 使用结构体类型变量修改结构体字段
func modifyPersonByValue(p Person) {
p.Name = "Bob"
p.Age = 25
}
func main() {
// 创建结构体对象
person := Person{Name: "John", Age: 40}
// 使用指针类型修改结构体字段
modifyPersonByPointer(&person)
fmt.Println("通过指针类型修改后的结果:", person)
// 使用结构体类型变量修改结构体字段
modifyPersonByValue(person)
fmt.Println("通过结构体类型变量修改后的结果:", person)
}
运行结果:
通过指针类型修改后的结果: {Alice 30}
通过结构体类型变量修改后的结果: {John 40}
可以看到,通过指针类型修改结构体字段后,原始的person
对象也被修改了。而通过结构体类型变量修改结构体字段后,原始的person
对象并未发生改变。
这个示例展示了在函数内部如何修改结构体字段。通过指针类型传递结构体,在函数内部直接修改指针所指向的数据,从而影响原始结构体对象。而通过结构体类型变量传递,函数内部对结构体的修改只是对参数的复制,不会影响原始结构体对象。
在实际应用中,可以根据需要选择适合的方式来操作结构体数据。如果需要在函数内部修改原始结构体对象,可以使用指针类型;如果不想影响原始对象,可以使用结构体类型变量。