Golang的储存机制主要包括变量储存、堆栈储存和垃圾回收。

1. 变量储存

在Golang中,变量可以储存在三个地方:全局变量区、局部变量区和命名空间。全局变量区和局部变量区是分开的,分别用于存储全局变量和函数内的局部变量。命名空间则是用于在不同包中访问变量。

示例代码:

package main

import "fmt"

// 全局变量
var globalVar int = 100

func main() {
   // 局部变量
   var localVar int = 10

   fmt.Println(globalVar)
   fmt.Println(localVar)
}

2. 堆栈储存

在Golang中,分配内存可以使用堆、栈或静态储存。堆和栈都是用于动态分配内存的,而静态储存则是指全局变量和静态变量。Golang中使用的是基于堆栈的分配器,它使用垃圾回收来管理堆内存。

堆栈储存的示例代码:

package main

import "fmt"

func main() {
   // 使用堆
   var ptr *int = new(int)
   *ptr = 100
   fmt.Println(*ptr)

   // 使用栈
   var x int = 10
   fmt.Println(x)
}

3. 垃圾回收

Golang使用垃圾回收来管理堆内存,该机制可自动检测和释放不再使用的内存空间,从而避免内存泄漏。垃圾回收器会定期扫描堆内存,并标记不再使用的对象,然后将它们释放出来。

垃圾回收的示例代码:

package main

import (
   "fmt"
   "time"
)

func main() {
   // 手动触发垃圾回收
   runtime.GC()

   // 让程序休眠一段时间,以便让垃圾回收机制扫描内存
   time.Sleep(time.Millisecond * 100)
   
   // 新建一个对象
   var ptr *int = new(int)
   *ptr = 100
   fmt.Println(*ptr)
}