go 1.20新特性
goland设置
Enviroment 定义环境变量
Go tool arguments 就是go build 的参数
Program arguments 启动参数
GOEXPERIMENT=arenas
-tags goexperiment.arenas

//go:build goexperiment.arenas
package main
import (
"arena"
"fmt"
"net/http"
"unsafe"
)
type Custom struct {
Foo string
}
func processRequest(req *http.Request) {
// 开始创建公共arena内存池
mem := arena.NewArena()
// 最后统一释放内存池
defer mem.Free()
// 分配一系列单对象
for i := 0; i < 10; i++ {
obj := arena.New[Custom](mem)
obj.Foo = "Hello"
fmt.Printf("%v\n", obj)
}
// 或者分配slice 暂时不支持map
// 参数 mem, length, capacity
slice := arena.MakeSlice[Custom](mem, 100, 200)
slice[0].Foo = "hello"
fmt.Printf("%v\n", slice)
// 不能直接分配string,可借助bytes转换
src := "source string"
bs := arena.MakeSlice[byte](mem, len(src), len(src))
copy(bs, src)
str := unsafe.String(&bs[0], len(bs))
fmt.Printf("%v\n", str)
}
func main() {
processRequest(nil)
}
Go1.20引入了Arenas实验特性,允许开发者创建内存池以优化内存分配。示例代码展示了如何使用arena分配对象、切片以及转换字符串,以减少GC压力并提高性能。
310

被折叠的 条评论
为什么被折叠?



