我在 Github 上看到了issue,它說 sync.Pool should be used?only?with pointer types,例如:var TPool = sync.Pool{? ? New: func() interface{} {? ? ? ?return new(T)? ? },}是否有意義?怎么樣return T{},哪個(gè)是更好的選擇,為什么?
2 回答

千巷貓影
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
的重點(diǎn)sync.Pool
是避免(昂貴的)分配。大型緩沖區(qū)等。您分配一些緩沖區(qū),它們保留在內(nèi)存中,可供重用。因此使用指針。
但是在這里,您將在每一步都復(fù)制這些值,從而違背了目的。(假設(shè)你T
是一個(gè)“正?!苯Y(jié)構(gòu)而不是類似的東西SliceHeader
)

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
沒有必要。在大多數(shù)情況下,它應(yīng)該是一個(gè)指針,因?yàn)槟阆牍蚕硪粋€(gè)對象,而不是制作副本。
在某些用例中,這可以是非指針類型,例如某些外部資源的 id。我可以想象一個(gè)用字符串表示的路徑池(已安裝的磁盤驅(qū)動(dòng)器),其中正在進(jìn)行一些大文件操作。
- 2 回答
- 0 關(guān)注
- 138 瀏覽
添加回答
舉報(bào)
0/150
提交
取消