Bagaimanakah Pengkompil Go Memastikan Pematuhan Antara Muka pada Masa Penyusun?

Patricia Arquette
Lepaskan: 2024-10-29 22:21:29
asal
281 orang telah melayarinya

How Does Go's Compiler Ensure Interface Compliance at Compile Time?

Semakan Jenis Kompilasi Pematuhan Antara Muka Golang

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)
)
Salin selepas log masuk

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
Salin selepas log masuk

Kod berikut kemudian memberikan nilai nol jenis *CachingFetcher kepada f:

f = (*CachingFetcher)(nil)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!