Flamboyan


Interface Go, bagian-bagian rumit

cukup mudah, selempang kedua kotak di mobil Anda dan berkendara! Tapi apakah skenario itu membuktikan bahwa Anda bisa melakukan hal yang sama jika mereka hanya menyerahkan Anda makhluk tanpa box? Tidak semuanya. Pertama, intuisi untuk perbedaan antara nilai-nilai antarmuka dan nilai-nilai beton di Go. Mereka memberi Anda dua kotak, satu berlabel 'ramah ular', salah satu 'laba-laba berbulu'. Pencitraan membantu teman Anda memindahkan hewan peliharaan mereka ke baru home.Equivalently, jangan menganggap bahwa karena Anda dapat menyimpan beton Pengguna dalam nilai antarmuka Bernama, Anda dapat menggunakan nilai beton sebagai nilai antarmuka. Nilai beton dan nilai antarmuka yang berisi itu adalah hal-hal fundamental yang berbeda dan dapat digunakan dalam berbagai ways.They're disebut nilai dinamis dan jenis dinamis masing - dinamis karena keduanya ditetapkan pada runtime ketika kita nilai beton assign menjadi nilai antarmuka . Yang kedua sekarang akan mengarah ke pelaksanaan antarmuka untuk jenis nilai beton. Bila Anda menempatkan nilai beton ke nilai antarmuka, salah satu pointer mulai menunjuk pada nilai. Mari kita membuat beton dengan mempertimbangkan apa ini terlihat 'kotak' seperti. nilai-nilai antarmuka Go benar-benar sepasang pointers.When metode disebut pada nilai antarmuka, Go mengikuti pointer pelaksanaan untuk menemukan metode yang tepat dan pointer nilai untuk dapat menggunakan nilai sebagai penerima. Dengan demikian Anda bisa melihat mengapa kode yang bekerja dengan nilai antarmuka benar-benar tidak bisa bekerja pada nilai-nilai beton saja. Pasangan ini pointer adalah rahasia bagaimana interface Go bekerja.
Jika mendapatkan kesalahan tipe ketika Anda mencoba untuk menggunakan nilai beton di tempat yang membutuhkan nilai antarmuka dan Anda berpikir "tetapi memenuhi antarmuka", ingat: nilai-nilai antarmuka dan beton adalah hal yang sangat berbeda. Bahwa Anda dapat menempatkan nilai konkrit dalam nilai antarmuka tidak berarti itu adalah nilai interface, sehingga Anda tidak dapat menggunakannya dalam semua ways.Although sama kita tahu semua antarmuka memenuhi antarmuka kosong, nilai antarmuka masih berbeda nilai beton: itu wadah yang memungkinkan kita untuk mengintip dan ekstrak jenis beton melalui jenis pernyataan. Misalnya, jika Anda memiliki fungsi menerima [] antarmuka {} Anda tidak bisa lewat sepotong nilai beton. (source)