Tolong jelaskan mengenai Sistem antarmuka dari Go (bahasa pemrograman)

Go menyediakan dua fitur yang menggantikan kelas warisan.

Yang pertama adalah embedding, yang dapat dilihat sebagai bentuk otomatis dari komposisi atau delegasi.:255

Yang kedua adalah antarmuka, yang menyediakan runtime polimorfisme.:266 menyediakan Antarmuka yang terbatas bentuk struktural mengetik di sebaliknya nominal jenis sistem Go. Setiap jenis yang mengimplementasikan semua metode dari interface sesuai dengan antarmuka yang. Antarmuka Go yang dirancang setelah protokol dari bahasa pemrograman Smalltalk. Beberapa sumber yang menggunakan istilah bebek mengetik ketika menggambarkan Go antarmuka. Meskipun istilah bebek mengetik tidak tepat didefinisikan dan oleh karena itu tidak salah, itu biasanya berarti bahwa kesesuaian jenis ini tidak statis diperiksa. Sejak kesesuaian untuk Go dengan antarmuka yang diperiksa..... dengan Go compiler (kecuali ketika melakukan pernyataan jenis), penulis Go lebih suka menggunakan istilah pengetikan struktural.

Sebuah antarmuka menentukan satu set jenis dengan daftar yang diperlukan metode dan jenis mereka dan puas dengan setiap jenis yang memiliki metode yang diperlukan. Pelaksana jenis yang tidak perlu menentukan mereka mengimplementasikan interface, jadi jika Shape, Square dan Circle didefinisikan sebagai: Kedua Square dan Circle yang secara implisit Shape dan dapat ditugaskan untuk Shape-diketik variabel.:263–268 Dalam bahasa formal, antarmuka Go sistem menyediakan struktural daripada nominal mengetik. Interface dapat menanamkan antarmuka lain dengan efek menciptakan gabungan antarmuka yang puas dengan tepat jenis yang menerapkan tertanam antarmuka dan metode-metode yang baru yang didefinisikan antarmuka menambahkan.:270

Go standar perpustakaan menggunakan antarmuka untuk memberikan genericity di beberapa tempat, termasuk sistem input/output yang didasarkan pada konsep-konsep dari Reader dan Writer.:282–283

Selain memanggil metode melalui antarmuka, Go memungkinkan mengubah antarmuka nilai-nilai untuk jenis lain dengan run-time type check. Bahasa konstruksi untuk melakukannya adalah jenis pernyataan, yang memeriksa terhadap satu potensi jenis, dan jenis switch, yang memeriksa terhadap beberapa jenis.

Yang kosong antarmuka interface{} adalah sudut yang penting kasus ini karena hal ini dapat merujuk ke item dari setiap jenis beton. Hal ini mirip dengan Object class dalam Java atau C# dan puas dengan jenis apa pun, termasuk built-in jenis seperti int.:284 Kode menggunakan kosong interface tidak hanya memanggil metode (atau built-in operator) yang disebut-objek, tetapi dapat menyimpan interface{} nilai, cobalah untuk mengubahnya menjadi lebih berguna melalui jenis jenis pernyataan atau jenis switch, atau periksa dengan Go mencerminkan paket. Karena interface{} dapat merujuk ke nilai apapun, itu adalah cara yang terbatas untuk melarikan diri dari batasan-batasan statis mengetik, seperti void* di C tapi dengan tambahan run-time type pemeriksaan.

Antarmuka nilai-nilai yang diimplementasikan dengan menggunakan pointer ke data dan pointer ke run-time jenis informasi. Seperti beberapa jenis lain diimplementasikan dengan menggunakan pointer pada Go, antarmuka nilai-nilai nihil jika tidak terinisialisasi.