[過去ログ] Go language part 1 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
970: デフォルトの名無しさん [sage] 2017/09/28(木) 12:31:06.65 ID:h8WKWHlz(1/2) AAS
type fSlice []float64
var pool = sync.Pool{
New: func() interface{} {
return make(fSlice, 0, 100)
},
}
go func(){
n := pool.Get().(fSlice)
...
pool.Put(n)
}()
20回に1回くらい
panic: interface conversion: interface {} is *main.fSlice, not main.fSlice
pool.Get().(*fSlice)なんてすると
panic: interface conversion: interface {} is main.fSlice, not *main.fSlice
で仕方なく
n,ok := pool.Get().(fSlice)
if !ok {...}した時に気づいたのだけど、Falseでも下の処理には影響しない
Falseだと100回のappendで何故かCapが128になる(Trueだと100)
この謎分かる?
971: デフォルトの名無しさん [sage] 2017/09/28(木) 13:36:21.42 ID:h8WKWHlz(2/2) AAS
原因分かりました
pool.Put(n)の所、端折って書きましたが、実際はresetメソッド作ってそっちで(*n)[:0]してましたが
func(f *fSlice)reset(){
*f= (*f)[:0]
pool.Put(f) → pool.Put(*f)にすべきでした
}
サーセン
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s