MST
星途 面试题库

面试题:Go语言中函数参数传递的基本内存机制

在Go语言中,描述一下当传递一个结构体类型的参数到函数中时,内存是如何分配和传递的?请举例说明。
38.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在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

从内存分配角度看,原始的结构体实例pmain函数的栈上(如果是在全局定义,则在数据段),传递到函数printPerson时,在printPerson函数栈上重新分配一块内存来存放副本。