go 1.20新特性
goland设置
Enviroment 定义环境变量
Go tool arguments 就是go build 的参数
Program arguments 启动参数
GOEXPERIMENT=arenas
-tags goexperiment.arenas
//go:build goexperiment.arenaspackage mainimport ("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, capacityslice := 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)
}