Go でのスライスのクリア
提供されたコード スニペットは、スライスの長さを 0 に設定してスライスを「クリア」する 1 つのアプローチを示しています。
package main import "fmt" func main() { letters := []string{"a", "b", "c", "d"} fmt.Println(cap(letters)) fmt.Println(len(letters)) // clear the slice letters = letters[:0] fmt.Println(cap(letters)) fmt.Println(len(letters)) }
このアプローチはスライスの内容をクリアしているように見えますが、スライスに関連付けられた基礎となるメモリをガベージ コレクターに解放するわけではありません。スライスを実際にクリアしてメモリを再利用するには、スライスを nil に設定するのがベスト プラクティスです。
package main import "fmt" func main() { letters := []string{"a", "b", "c", "d"} fmt.Println(cap(letters)) fmt.Println(len(letters)) // clear the slice letters = nil fmt.Println(cap(letters)) fmt.Println(len(letters)) }
スライスを nil に設定すると、いくつかの利点があります。
スライスの容量をゼロに変更しても、スライスがクリアされたり、基礎となるメモリが解放されたりするわけではないことに注意することが重要です。ただし、スライスを nil に設定すると、割り当てられたメモリがすべて削除され、スライスが初期状態にリセットされます。
以上がGo でスライスを実際にクリアし、そのメモリを取り戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。