Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah anda mengosongkan kepingan dalam Go dengan berkesan dan melepaskan memori asasnya?
Membersihkan Slice dalam Go
Artikel membincangkan pendekatan optimum untuk membersihkan kepingan dalam Go. Penyelesaian yang dicadangkan pada mulanya berusaha untuk membersihkan kepingan dengan menetapkannya kepada julat kosong penimbalnya sendiri. Walaupun pendekatan ini kelihatan logik, ia tidak melepaskan memori asas yang dikaitkan dengan hirisan.
Penyelesaian yang disyorkan ialah dengan hanya menetapkan kepingan kepada sifar. Potongan nil dalam Go mempamerkan ciri berkelakuan baik, dan memberikan kepingan kepada nil melepaskan memori asas kepada pengumpul sampah. Pendekatan ini secara berkesan membersihkan kepingan tanpa menanggung had cadangan awal.
Untuk menggambarkan keberkesanan kaedah ini, pertimbangkan contoh kod berikut:
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) }
Output:
letters = [a b c d] 4 4 0 a 1 b 2 c 3 d letters = [] 0 0 letters = [e] 1 1 0 e
Seperti yang ditunjukkan, menetapkan kepingan kepada sifar akan mengosongkan kandungannya, termasuk kapasitinya. Ini membolehkan penggunaan semula kepingan yang cekap tanpa sebarang data yang berlarutan daripada operasi sebelumnya.
Atas ialah kandungan terperinci Bagaimanakah anda mengosongkan kepingan dalam Go dengan berkesan dan melepaskan memori asasnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!