Go Language Tutorial'da arayüzlerin nasıl çalıştığını açıklar :
Go'nun sınıfları yok. Ancak, yapı türleri üzerinde yöntemler tanımlayabilirsiniz. Yöntem alıcı fonk anahtar kelime ve yöntem adı arasındaki kendi argüman listesinde görünür.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Bir arayüz tipi, bir dizi yöntemle tanımlanır. Arabirim türünün bir değeri, bu yöntemleri uygulayan herhangi bir değeri tutabilir.
Go'da bir arayüz oluşturmanın tek yolu bu. Google ayrıca şunları açıklar:
Bir tür, yöntemleri uygulayarak bir arayüz uygular. Açık bir niyet
interface
beyanı [yani beyannameler] yoktur.Örtük ara yüzler, uygulama paketlerini ara yüzleri tanımlayan paketlerden ayırır: ikisi de diğerine bağlı değildir.
Ayrıca, kesin arabirimlerin tanımını da teşvik eder, çünkü her uygulamayı bulmanız ve onu yeni arabirim adıyla etiketlemeniz gerekmez.
Bütün bunlar şüpheli bir şekilde C #'daki Extension Yöntemleri'ne benziyor , ancak Go'daki yöntemler acımasızca polimorfiktir; onları uygulayan herhangi bir tür üzerinde çalışacaklardır .
Google bunun hızlı gelişimi teşvik ettiğini iddia ediyor, ancak neden? C # 'daki açık arabirimlerden uzaklaşarak bir şeyden vazgeçiyor musunuz? C # 'daki Eklenti Metodları, Go arayüzlerinin C #' daki faydalarından bazılarını türetmesine izin verebilir mi?