Nell'esercitazione Go Language, spiegano come funzionano le interfacce:
Go does not have classes. However, you can define methods on struct types. The method receiver appears in its own argument list between the func keyword and the method name.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
An interface type is defined by a set of methods. A value of interface type can hold any value that implements those methods.
Questo è l'unico modo per creare un'interfaccia in Go. Google spiega ulteriormente che:
A type implements an interface by implementing the methods. There is no explicit declaration of intent [i.e.
interface
declarations].Implicit interfaces decouple implementation packages from the packages that define the interfaces: neither depends on the other.
It also encourages the definition of precise interfaces, because you don't have to find every implementation and tag it with the new interface name.
Tutto ciò sembra sospetto come Metodi di estensione in C # , ad eccezione dei metodi in Go sono spietatamente polimorfici; funzioneranno su qualsiasi tipo che li implementa.
Google sostiene che ciò incoraggi un rapido sviluppo, ma perché? Ti arrendi qualcosa spostandoti da interfacce esplicite in C #? I Metodi di estensione in C # possono consentire di ricavare alcuni dei vantaggi che le interfacce Go hanno in C #?