[過去ログ]
Go language part 1 (1002レス)
Go language part 1 http://mevius.5ch.net/test/read.cgi/tech/1381374291/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
970: デフォルトの名無しさん [sage] 2017/09/28(木) 12:31:06.65 ID:h8WKWHlz 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) この謎分かる? http://mevius.5ch.net/test/read.cgi/tech/1381374291/970
971: デフォルトの名無しさん [sage] 2017/09/28(木) 13:36:21.42 ID:h8WKWHlz 原因分かりました pool.Put(n)の所、端折って書きましたが、実際はresetメソッド作ってそっちで(*n)[:0]してましたが func(f *fSlice)reset(){ *f= (*f)[:0] pool.Put(f) → pool.Put(*f)にすべきでした } サーセン http://mevius.5ch.net/test/read.cgi/tech/1381374291/971
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.036s