Golang 结构体参数:传递指针与值 | 深入解析
在 Go 语言中,结构体参数并非必须。你可以使用指针作为参数来传递结构体的引用,也可以直接传递结构体的值。
使用指针传递结构体
当结构体作为参数传递时,若你希望修改原始的结构体对象,可以使用指针作为参数类型。这样,函数内部对结构体的修改将会影响到原始的结构体对象。
示例如下:
type Person struct {
Name string
Age int
}
func updatePerson(p *Person) {
p.Age = 30
}
func main() {
person := Person{Name: 'Alice', Age: 25}
updatePerson(&person)
fmt.Println(person) // 输出: {Alice 30}
}
直接传递结构体
如果你不想修改原始的结构体对象,可以直接将结构体对象作为参数传递。这样,函数内部对结构体的修改只会影响到函数内部的副本,不会影响到原始的结构体对象。
示例如下:
type Person struct {
Name string
Age int
}
func printPerson(p Person) {
p.Age = 30
fmt.Println(p) // 输出: {Alice 30}
}
func main() {
person := Person{Name: 'Alice', Age: 25}
printPerson(person)
fmt.Println(person) // 输出: {Alice 25}
}
注意
当结构体作为参数传递时,如果结构体对象较大,传递指针可能会更高效。因为传递指针只需要复制指针的值,而不需要复制整个结构体对象的值。
原文地址: https://www.cveoy.top/t/topic/lgdB 著作权归作者所有。请勿转载和采集!