Nel Go Language Tutorial, spiegano come funzionano le interfacce:
Go non ha classi. Tuttavia, è possibile definire metodi su tipi di struttura. Il destinatario del metodo appare nel proprio elenco di argomenti tra la parola chiave func e il nome del metodo.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Un tipo di interfaccia è definito da una serie di metodi. Un valore di tipo di interfaccia può contenere qualsiasi valore che implementa tali metodi.
Questo è l'unico modo per creare un'interfaccia in Go. Google spiega inoltre che:
Un tipo implementa un'interfaccia implementando i metodi. Non esiste una dichiarazione esplicita di intenti [ad esempio
interface
dichiarazioni].Le interfacce implicite separano i pacchetti di implementazione dai pacchetti che definiscono le interfacce: nessuno dei due dipende dall'altro.
Incoraggia anche la definizione di interfacce precise, perché non è necessario trovare tutte le implementazioni e contrassegnarle con il nome della nuova interfaccia.
Tutto ciò suona sospettosamente come metodi di estensione in C # , tranne per il fatto che i metodi in Go sono spietatamente polimorfici; opereranno su qualsiasi tipo che li implementa.
Google afferma che ciò incoraggia un rapido sviluppo, ma perché? Rinunci a qualcosa allontanandoti da interfacce esplicite in C #? I metodi di estensione in C # potrebbero consentire di trarre alcuni dei vantaggi che le interfacce Go hanno in C #?