Mengesahkan sama ada nilai mematuhi antara muka yang ditentukan merupakan aspek penting dalam pengaturcaraan Go. Soalan ini timbul apabila jenis nilai tidak diketahui, memerlukan semakan dinamik.
Dalam coretan kod yang disediakan, pembolehubah val ialah contoh rentetan MyType, yang tidak tidak secara langsung melaksanakan antara muka Somether. Untuk menyemak jenis secara dinamik, gunakan penegasan jenis:
_, ok := val.(Somether)
Penegasan ini cuba menukar nilai val kepada antara muka Somether. Pembolehubah ok menunjukkan sama ada penukaran berjaya (benar) atau tidak (salah). Walau bagaimanapun, pendekatan ini memerlukan nilai sebagai jenis antara muka, yang mungkin tidak selalu berlaku.
Kaedah yang lebih jelas ialah membenamkan antara muka yang diingini ke dalam jenis nilai:
var _ Somether = (*MyType)(nil)
Sintaks ini memberikan penuding nol jenis nilai kepada pembolehubah antara muka. Jika jenis nilai melaksanakan antara muka, kod akan disusun tanpa ralat. Jika tidak, pengkompil akan membuang ralat.
Sebagai contoh, dalam kes ini:
func (mt MyType) Method() bool { return true }
Jenis MyType melaksanakan Kaedah antara muka Somether. Oleh itu, kod berikut akan menyusun dan tidak melakukan apa-apa:
var _ Somether = (*MyType)(nil)
Secara amnya, adalah lebih baik untuk menggunakan semakan masa kompilasi untuk memastikan nilai melaksanakan antara muka pada masa penyusunan dan bukannya bergantung pada semakan dinamik pada masa jalan. Semakan masa kompilasi menyediakan keselamatan jenis yang lebih kukuh dan boleh mengelakkan ralat yang tidak dijangka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Semak jika Nilai Go Melaksanakan Antara Muka Khusus pada Masa Penyusunan atau Masa Jalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!