面试题答案
一键面试在Go语言中,当传递一个结构体类型的参数到函数中时,是按值传递的,即会在函数栈上创建一份结构体的副本。
以下是一个示例:
package main
import "fmt"
// 定义一个结构体
type Person struct {
Name string
Age int
}
// 定义一个函数,接受Person结构体作为参数
func printPerson(p Person) {
fmt.Printf("Name: %s, Age: %d\n", p.Name, p.Age)
}
func main() {
p := Person{
Name: "John",
Age: 30,
}
printPerson(p)
}
在上述代码中,main
函数中创建了一个Person
结构体实例p
。当调用printPerson(p)
时,会在printPerson
函数的栈上创建p
的副本。对副本的任何修改都不会影响原始的p
。
从内存分配角度看,原始的结构体实例p
在main
函数的栈上(如果是在全局定义,则在数据段),传递到函数printPerson
时,在printPerson
函数栈上重新分配一块内存来存放副本。