Go でのスライスのクリア
この記事では、Go でスライスをクリアするための最適なアプローチについて説明します。最初に提案された解決策は、スライスを独自のバッファーの空の範囲に設定することでスライスをクリアしようとしました。このアプローチは論理的であるように見えますが、スライスに関連付けられた基礎となるメモリは解放されません。
推奨される解決策は、単純にスライスを nil に設定することです。 Go の nil スライスは正常に動作する特性を示し、スライスを nil に割り当てると、基礎となるメモリがガベージ コレクターに解放されます。このアプローチは、最初の提案の制限を受けることなく、スライスを効果的にクリアします。
この方法の有効性を説明するために、次のコード サンプルを検討してください。
package main import ( "fmt" ) func dump(letters []string) { fmt.Println("letters = ", letters) fmt.Println(cap(letters)) fmt.Println(len(letters)) for i := range letters { fmt.Println(i, letters[i]) } } func main() { letters := []string{"a", "b", "c", "d"} dump(letters) // clear the slice letters = nil dump(letters) // add stuff back to it letters = append(letters, "e") dump(letters) }
出力:
letters = [a b c d] 4 4 0 a 1 b 2 c 3 d letters = [] 0 0 letters = [e] 1 1 0 e
示されているように、スライスを nil に設定すると、その容量を含むその内容がクリアされます。これにより、以前の操作からのデータが残ることなく、スライスを効率的に再利用できます。
以上がGo でスライスを効果的にクリアし、その基礎となるメモリを解放するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。