Dalam Go Language Tutorial, mereka menjelaskan cara kerja antarmuka:
Go tidak memiliki kelas. Namun, Anda dapat menentukan metode pada tipe struct. The Metode penerima muncul dalam daftar argumen sendiri antara kata kunci func dan nama metode.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Jenis antarmuka didefinisikan oleh serangkaian metode. Nilai tipe antarmuka dapat menampung nilai apa pun yang mengimplementasikan metode tersebut.
Ini adalah satu-satunya cara untuk membuat antarmuka di Go. Google selanjutnya menjelaskan bahwa:
Tipe mengimplementasikan antarmuka dengan mengimplementasikan metode. Tidak ada deklarasi niat yang eksplisit [yaitu
interface
deklarasi].Antarmuka implisit memisahkan paket implementasi dari paket yang mendefinisikan antarmuka: tidak tergantung pada yang lain.
Ini juga mendorong definisi antarmuka yang tepat, karena Anda tidak harus menemukan setiap implementasi dan menandainya dengan nama antarmuka yang baru.
Semua ini kedengarannya mencurigakan seperti Metode Ekstensi dalam C # , kecuali bahwa metode dalam Go adalah polimorfik tanpa ampun; mereka akan beroperasi pada semua jenis yang mengimplementasikannya.
Google mengklaim bahwa ini mendorong perkembangan yang cepat, tetapi mengapa? Apakah Anda melepaskan sesuatu dengan menjauh dari antarmuka eksplisit di C #? Bisakah Metode Ekstensi dalam C # memungkinkan seseorang untuk mendapatkan beberapa manfaat yang dimiliki antarmuka Go di C #?