Menetapkan Antara Muka kepada Nil dalam Go
Dalam Go, antara muka menyediakan cara untuk mentakrifkan satu set kaedah yang mesti dilaksanakan oleh jenis. Mereka membenarkan polimorfisme, membolehkan pelbagai jenis dirawat secara seragam. Walau bagaimanapun, menetapkan secara langsung antara muka kepada sifar boleh menjadi rumit.
Isu Nilai Penunjuk lwn. Nilai Antara Muka
Apabila cuba menetapkan antara muka kepada sifar, cabarannya timbul kerana antara muka tidak memegang nilai sebenar tetapi sebaliknya menunjuk kepada nilai jenis konkrit. Oleh itu, untuk mengubah suai nilai antara muka, anda perlu menghantar penuding kepadanya.
Penyelesaian 1: Tiada Nilai{} Antara Muka
Jika anda mahu tiada nilai antara muka{}, fungsi seperti ini diperlukan:
<code class="go">func setNilIf(v *interface{}) { *v = nil }</code>
Untuk menggunakannya:
<code class="go">var i interface{} = "Bob" fmt.Printf("Before: %v\n", i) setNilIf(&i) fmt.Printf("After: %v\n", i)</code>
Penyelesaian 2: Tiada Penunjuk Menggunakan tidak selamat.Penunjuk
Untuk menggunakannya:
<code class="go">func setNilPtr(p unsafe.Pointer) { *(**int)(p) = nil }</code>
<code class="go">typ := &TYP{InternalState: "filled"} fmt.Printf("Before: %v\n", typ) setNilPtr(unsafe.Pointer(&typ)) fmt.Printf("After: %v\n", typ)</code>
Walaupun terdapat pelbagai penyelesaian yang dibentangkan, pendekatan yang disyorkan kekal untuk memberikan sifar terus kepada nilai:
Pendekatan ini adalah mudah dan mengelakkan kerumitan yang tidak perlu.Atas ialah kandungan terperinci Cara Menetapkan Antara Muka kepada Nil dalam Go: Panduan untuk Memahami dan Amalan Terbaik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!