Go 1.3 的sync包中加入一個新特性:Pool。golang
官方文檔能夠看這裏http://golang.org/pkg/sync/#Pool設計
這個類設計的目的是用來保存和複用臨時對象,以減小內存分配,下降CG壓力。code
type Pool func (p *Pool) Get() interface{} func (p *Pool) Put(x interface{}) func New() interface{}
Get返回Pool中的任意一個對象。對象
若是Pool爲空,則調用New返回一個新建立的對象。ip
若是沒有設置New,則返回nil。內存
還有一個重要的特性是,放進Pool中的對象,會在說不許何時被回收掉。文檔
因此若是事先Put進去100個對象,下次Get的時候發現Pool是空也是有可能的。字符串
不過這個特性的一個好處就在於不用擔憂Pool會一直增加,由於Go已經幫你在Pool中作了回收機制。get
這個清理過程是在每次垃圾回收以前作的。垃圾回收是固定兩分鐘觸發一次。pip
並且每次清理會將Pool中的全部對象都清理掉!
package main import( "sync" "log" ) func main(){ // 創建對象 var pipe = &sync.Pool{New:func()interface{}{return "Hello,BeiJing"}} // 準備放入的字符串 val := "Hello,World!" // 放入 pipe.Put(val) // 取出 log.Println(pipe.Get()) // 再取就沒有了,會自動調用NEW log.Println(pipe.Get()) }
// 輸出
2014/09/30 15:43:30 Hello,World!
2014/09/30 15:43:30 Hello,BeiJing