面试题答案
一键面试package main
import "fmt"
// 定义Person结构体
type Person struct {
name string
age int
}
// 修改age字段值并返回修改后的结构体指针
func modifyAge(p *Person, newAge int) *Person {
p.age = newAge
return p
}
使用指针而不是直接传递结构体主要有以下原因:
- 性能优化:当结构体比较大时,直接传递结构体需要复制整个结构体内容,开销较大。而传递指针只需要复制一个指针的大小(通常为4字节或8字节),大大提高了效率。
- 对原数据的修改:如果直接传递结构体,函数内部对结构体的修改不会影响到原结构体。而通过传递指针,函数可以直接修改原结构体的数据,这在需要改变调用者传入数据的场景中非常有用。
你可以使用以下方式调用这个函数:
func main() {
p := Person{name: "Alice", age: 30}
newP := modifyAge(&p, 35)
fmt.Printf("Name: %s, Age: %d\n", newP.name, newP.age)
}
上述代码定义了一个 Person
结构体,modifyAge
函数接收一个 Person
结构体指针和新的年龄值,修改 age
字段并返回修改后的指针。在 main
函数中,创建一个 Person
实例,调用 modifyAge
函数并打印修改后的结果。