Hai, rakan baharu Go (atau patutkah saya katakan Gophers-in-training?)! ?
Antara muka kelihatan seperti salah satu perkara yang misteri dan ajaib yang semua orang terus bercakap tetapi tiada siapa yang benar-benar menjelaskan dengan cara yang masuk akal. "Ia seperti polimorfisme tetapi lebih mudah, " kata mereka. "Ia seperti kontrak," dakwa mereka. Tetapi setiap kali saya cuba melaksanakannya, kod saya akan melihat saya seperti, "Apa yang anda lakukan, manusia?" ?
Tetapi itu ketika itu. Kini, antara muka dan saya berada dalam keadaan yang lebih baik, dan saya di sini untuk membantu anda mengelakkan kekeliruan awal saya. Jadi, jika anda telah menggaru kepala anda tentang antara muka Go, dapatkan secawan kopi (atau teh) dan mari kita pecahkannya, satu langkah pada satu masa—tolak sakit kepala. ?
Jadi, Apakah Sebenarnya Antara Muka?
Mari kita mulakan dari bahagian paling atas. Dalam Go, antara muka pada asasnya ialah satu cara untuk menentukan tingkah laku, tetapi tanpa terperangkap dengan butiran cara ia berfungsi. Bayangkan anda bos sebuah kilang, dan anda tidak kisah bagaimana mesin itu berfungsi; anda hanya peduli bahawa ia boleh menghasilkan produk. Begitulah antara muka Go: anda mentakrifkan perkara yang perlu berlaku, tetapi bukan cara ia harus dilakukan.
Sebagai contoh, mari kita berpura-pura bekerja dengan haiwan (ya, Pergi bekerja dengan haiwan, tinggal bersama saya di sini). Anda tahu setiap haiwan mengeluarkan bunyi, tetapi anda tidak begitu peduli bagaimana ia berlaku. Anjing menyalak, kucing mengeong, dan itik…baiklah, mereka bergurau. Anda boleh menentukan antara muka seperti ini:
type Animal interface { Sound() string }
apa ini Hanya kontrak, berkata: "Hei, apa-apa jenis yang ingin dipanggil Haiwan mesti mempunyai kaedah Sound()." Itu sahaja! Tiada sihir pelik yang terlibat.
Tunjukkan Kod Saya! ???
Mari kita ambil contoh yang sangat mudah dan lihat cara ia berfungsi dalam tindakan. Kami akan mencipta beberapa haiwan dan membuat mereka bercakap.
package main import "fmt" // The Animal interface type Animal interface { Sound() string } // Define a Dog type Dog struct{} func (d Dog) Sound() string { return "Woof!" } // Define a Cat type Cat struct{} func (c Cat) Sound() string { return "Meow!" } func main() { // Our Animal variable can hold any type that satisfies the interface var myPet Animal // myPet is now a Dog myPet = Dog{} fmt.Println(myPet.Sound()) // Outputs: Woof! // myPet is now a Cat myPet = Cat{} fmt.Println(myPet.Sound()) // Outputs: Meow! }
Apa yang berlaku di sini?
Di sinilah keajaiban antara muka Go benar-benar bermula ??:
selagi sesuatu jenis mempunyai kaedah yang diperlukan, ia memenuhi antara muka. Tidak perlu menyebut secara eksplisit "Anjing melaksanakan Haiwan"—Go cukup bijak untuk memikirkannya sendiri! ??
Mengapa Anda Perlu Mementingkan Antara Muka?
Biar saya setaraf dengan awak. Pada mulanya, saya seperti, "Mengapa perlu bersusah payah dengan ini? Saya hanya boleh menulis kaedah saya secara langsung!” Tetapi percayalah, anda pasti mahu memahami antara muka lebih awal daripada kemudian, terutamanya apabila pangkalan kod anda mula berkembang.
Ini sebabnya:
Polymorphism: Anda boleh merawat pelbagai jenis secara seragam jika mereka melaksanakan antara muka yang sama. Inilah yang menjadikan antara muka begitu berkuasa—ia seperti mempunyai alat kawalan jauh universal yang berfungsi dengan mana-mana TV.
Kod Bersih: Antara muka membolehkan anda menulis kod yang lebih bersih dan modular. Anda mentakrifkan gelagat dan biarkan jenis mengendalikan pelaksanaannya sendiri.
Pelbagai Kaedah, Tiada Masalah!
Mari kita pertingkatkannya. Katakan anda sedang membina sistem untuk berfungsi dengan bentuk, dan anda ingin mengira kedua-dua luas dan perimeter untuk pelbagai bentuk seperti bulatan dan segi empat tepat. Masukkan antara muka berbilang kaedah!
type Animal interface { Sound() string }
Antara Muka Kosong (antara muka{})
Oh, anda fikir kami sudah selesai???? Tidak! Mari kita pergi lebih mendalam dengan antara muka kosong, antara muka{}, yang merupakan cara Go untuk berkata, "Saya boleh memegang apa-apa jenis." Ia seperti kotak percuma untuk semua di mana anda boleh membuang apa-apa sahaja—rentetan, nombor, struct—anda namakannya.
package main import "fmt" // The Animal interface type Animal interface { Sound() string } // Define a Dog type Dog struct{} func (d Dog) Sound() string { return "Woof!" } // Define a Cat type Cat struct{} func (c Cat) Sound() string { return "Meow!" } func main() { // Our Animal variable can hold any type that satisfies the interface var myPet Animal // myPet is now a Dog myPet = Dog{} fmt.Println(myPet.Sound()) // Outputs: Woof! // myPet is now a Cat myPet = Cat{} fmt.Println(myPet.Sound()) // Outputs: Meow! }
Antara muka kosong sering digunakan dalam situasi di mana anda tidak tahu terlebih dahulu jenis yang akan anda hadapi (fikirkan API atau perpustakaan). Ia seperti versi kad bebas Go.
Merangkul Antara Muka
Antara muka Learning Go boleh berasa seperti menavigasi labirin pada mulanya, tetapi apabila anda memahami asasnya, ia membuka dunia baharu yang penuh kod yang fleksibel, boleh digunakan semula dan bersih. Jadi jangan takut untuk menyelam!
Mulakan dengan mudah, bermain dengan contoh kecil dan biarkan keajaiban antara muka Go berkembang dalam diri anda. Tidak lama kemudian, anda akan menulis kod yang sebersih dan fleksibel seperti pengajar yoga di persidangan teknologi.
Selamat pengekodan, rakan Gophers! Semoga antara muka anda mudah, dan struct anda sentiasa dilaksanakan. ?✌️
Atas ialah kandungan terperinci Bagaimana Saya Berhenti Bimbang dan Belajar Antara Muka Cinta Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!