Dalam Go, struct berfungsi sebagai jenis data komposit yang kejadiannya boleh menyimpan pelbagai maklumat. Pertimbangkan struct Person berikut:
type Person struct { name string age int }
Sekarang, jika kita membuat instantiate struct ini:
person1 := Person{name: "Name", age: 69}
Menetapkan nil kepada objek struct (cth., person1 = nil) menimbulkan ralat penetapan jenis . Ini berbeza daripada kes peta dan kepingan di mana tiada boleh digunakan.
Go menggunakan pendekatan pengumpulan sampah untuk pengurusan ingatan. Pengumpul sampah secara automatik mengenal pasti objek yang tidak boleh dicapai dan melepaskan memori yang diperuntukkan. Ini bermakna pemadaman objek secara eksplisit tidak mungkin atau perlu dalam Go.
Walaupun pemadaman bukan pilihan, struct boleh dikosongkan atau ditimpa dengan memberikan nilai struct lain , biasanya nilai sifar (kosong struct):
person1 := Person{name: "Name", age: 69} // work with person1 // Clear person1: person1 = Person{}
Perhatikan bahawa tindakan ini tidak benar-benar membebaskan memori yang diperuntukkan untuk person1; pemungut sampah akan mengendalikan perkara ini apabila ia menjadi tidak dapat dicapai.
Untuk penunjuk kepada Orang (*Orang), menetapkan nil (menetapkannya kepada nil) akan mengosongkan rujukan dengan berkesan dan objeknya yang runcing. Proses ini meninggalkan pengumpul sampah untuk melepaskan ingatan objek runcing:
person1 := &Person{name: "Name", age: 69} // work with person1 // Clear person1: person1 = nil
Mekanisme pengumpulan sampah Go mengendalikan penyingkiran objek dengan cekap, menghapuskan keperluan untuk pemadaman eksplisit. Struct boleh dikosongkan dengan memberikan nilai sifar atau menetapkan penunjuk kepada sifar, dengan pengumpul sampah memastikan pengurusan memori yang betul.
Atas ialah kandungan terperinci Bagaimanakah cara saya 'memadamkan' struct dalam Go apabila kutipan sampah menguruskan memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!