Penyelesaian dalam Go: Objek Lalai dan Perangkap
Waktu jalan Go secara automatik memuktamadkan objek tertentu apabila ia dikumpul sampah. Mekanisme terbina dalam ini boleh membawa kepada kemungkinan perangkap jika tidak difahami dengan teliti.
Objek Dimuktamadkan Lalai:
Kesalahan Penyelesaian Lalai:
Bila os.File dimuktamadkan, ia memanggil sistem pengendalian untuk menutup deskriptor failnya. Walau bagaimanapun, jika deskriptor fail ini dikongsi dengan objek os.Fail lain yang dibuat menggunakan os.NewFile(fd int, rentetan nama) *Fail, memuktamadkan mana-mana objek akan merosakkan objek yang lain.
Sebagai contoh, pertimbangkan kod berikut :
package main import ( "fmt" "os" "runtime" ) func open() { os.NewFile(1, "stdout") } func main() { open() // Force finalization of unreachable objects _ = make([]byte, 1e7) runtime.GC() _, err := fmt.Println("some text") // Print something via os.Stdout if err != nil { fmt.Fprintln(os.Stderr, "could not print the text") } }
Kod ini akan gagal dengan ralat berikut, disebabkan oleh deskriptor fail yang dikongsi:
could not print the text
Atas ialah kandungan terperinci Bagaimanakah Penyempurnaan Objek Automatik Go Berfungsi, dan Apakah Kemungkinan Perangkapnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!