先上代码:
package main
import (
"fmt"
"sync"
)
var pool sync.Pool
type person struct {
Name string
Age int
}
func init() {
pool = sync.Pool{New: func() any {
return new(person)
}}
}
func main() {
p := pool.Get().(*person)
p.Name = "dav"
p.Age = 89
fmt.Println("person:", *p)
pool.Put(p)
p2 := pool.Get().(*person)
fmt.Println("person2:", *p2)
p3 := pool.Get().(*person)
fmt.Println("person3:", *p3)
}
测试结果:
person: {dav 89}
person2: {dav 89}
person3: { 0}
可以看到,我们通过操作 pool
的 get
和 put
函数就可以实现 pool
池的 person
复用。简单点说:
- 1.通过
New
自定义函数,我们可以定义从pool
中取出的对象 - 2.通过
Get
取出pool
中的对象,如果没有定义New
,则返回nil
,否则返回定义的对象 - 3.通过
Put
放回对象到池中,如果非nil
,下次Get
可以实现复用
通过以上操作,就可以实现对象复用,进而减轻内存分配压力,也减少GC带来的影响。
标签:Get,fmt,示例,sync,golang,person,Pool,pool From: https://www.cnblogs.com/davis12/p/17348118.html