Dalam Go, pengkompil memastikan bahawa jenis melaksanakan fungsi awam antara muka. Ini dikenali sebagai pemeriksaan jenis masa kompilasi. Contoh kod daripada camlistore menunjukkan konsep ini.
var ( _ blobref.StreamingFetcher = (*CachingFetcher)(nil) _ blobref.SeekFetcher = (*CachingFetcher)(nil) _ blobref.StreamingFetcher = (*DiskCache)(nil) _ blobref.SeekFetcher = (*DiskCache)(nil) )
Awalan _ menunjukkan bahawa tiada pembolehubah sedang dibuat. Sebaliknya, pernyataan digunakan untuk menyatakan bahawa jenis yang dinamakan melaksanakan antara muka yang sepadan.
Bahagian sebelah kanan (RHS) menggunakan sintaks penukaran (*T)(nil). Sintaks ini mencipta nilai nil yang ditaip. Nilai nil ialah nilai khas yang mewakili ketiadaan nilai. Nilai nil yang ditaip ialah nilai nil yang mempunyai jenis tertentu.
Dalam kes ini, (*T)(nil) mencipta nilai nil yang mempunyai jenis *T. Ini bersamaan dengan mengisytiharkan pembolehubah penunjuk dan memberikannya kepada nil. Nilai nil kemudiannya boleh digunakan untuk menetapkan kepada penuding daripada jenis yang sama.
Sebagai contoh, kod berikut mengisytiharkan pembolehubah penuding f jenis StreamingFetcher:
var f blobref.StreamingFetcher
Kod berikut kemudian memberikan nilai nol jenis *CachingFetcher kepada f:
f = (*CachingFetcher)(nil)
Tugasan ini sah kerana jenis CachingFetcher melaksanakan antara muka StreamingFetcher.
Atas ialah kandungan terperinci Bagaimanakah Pengkompil Go Memastikan Pematuhan Antara Muka pada Masa Penyusun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!