MST
星途 面试题库

面试题:Go语言中指针与内存管理的基础应用

在Go语言中,定义一个结构体 `Person` 包含姓名和年龄字段,然后编写一个函数,接受 `Person` 指针作为参数,在函数内修改其年龄字段的值。同时,说明这种指针操作如何与Go语言的内存管理机制相关联。
12.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

// 定义Person结构体
type Person struct {
    Name string
    Age  int
}

// 修改年龄的函数
func updateAge(p *Person, newAge int) {
    p.Age = newAge
}

在Go语言中,当我们使用指针操作结构体时,涉及到其内存管理机制。Go语言有自动垃圾回收(GC)机制。当我们创建一个 Person 实例时,例如 p := &Person{Name: "John", Age: 30},这个实例会被分配在堆内存上(如果 p 的作用域较大,逃逸分析会将其分配到堆上)。

当我们将这个指针 p 传递给 updateAge 函数时,函数内部对指针指向的结构体字段进行修改,实际上是直接修改堆内存上对应的值。由于Go语言的GC机制,只要还有指针指向堆上的这个 Person 实例,它就不会被回收。只有当没有任何指针指向这个实例时,GC机制会在合适的时机回收这块内存,从而实现自动内存管理。

你可以通过以下方式调用这个函数:

func main() {
    p := &Person{Name: "John", Age: 30}
    updateAge(p, 35)
    fmt.Printf("Name: %s, Age: %d\n", p.Name, p.Age)
}