Di penghujung fungsi utama dalam src/runtime/proc.go, terdapat satu gelung infinite for yang menarik:
<code class="go"> exit(0) for { var x *int32 *x = 0 }</code>
Gelung yang kelihatan berlebihan ini pada mulanya menimbulkan persoalan tetapi apabila diteliti lebih dekat, tujuannya menjadi jelas.
Dalam keadaan biasa dalam keadaan, panggilan keluar(0) harus menamatkan program. Walau bagaimanapun, mungkin terdapat keadaan apabila keluar gagal, meninggalkan program dalam keadaan tidak stabil. Gelung infinite for berfungsi sebagai failsafe, menghalang program daripada melaksanakan selanjutnya.
Menetapkan 0 kepada rantau memori yang dilindungi (cth., (int)(nil) = 0 atau, dalam kes ini, *x = 0) mencetuskan ralat pembahagian pada sistem dengan unit perlindungan memori. Ini dengan serta-merta menghentikan program.
Biasanya, gelung tak terhingga mestilah kod tidak boleh dicapai. Walau bagaimanapun, terdapat keadaan di mana andaian ini gagal, seperti:
Kod tidak boleh dicapai tidak terhad kepada gelung tak terhingga dalam proc.go. Binaan yang serupa muncul di bahagian lain masa jalan Go:
Kesimpulannya, gelung tak terhingga dalam proc.go ialah mekanisme failsafe kritikal yang direka untuk menghentikan program apabila semua mekanisme lain gagal. Dengan menyebabkan kesalahan pembahagian, ia memastikan program tidak terus dilaksanakan dalam keadaan tidak ditentukan atau tidak stabil. Memahami nuansa ini memberikan cerapan tentang keteguhan masa jalan Go.
Atas ialah kandungan terperinci Mengapa Masa Jalanan Go Menyertakan Gelung Infinite dalam `src/runtime/proc.go`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!