En Go Language Tutorial, explican cómo funcionan las interfaces:
Ir no tiene clases. Sin embargo, puede definir métodos en tipos de estructura. El receptor del método aparece en su propia lista de argumentos entre la palabra clave func y el nombre del método.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Un tipo de interfaz se define mediante un conjunto de métodos. Un valor de tipo de interfaz puede contener cualquier valor que implemente esos métodos.
Esta es la única forma de crear una interfaz en Go. Google explica además que:
Un tipo implementa una interfaz mediante la implementación de los métodos. No existe una declaración explícita de intenciones [es decir,
interface
declaraciones].Las interfaces implícitas desacoplan los paquetes de implementación de los paquetes que definen las interfaces: ninguno depende del otro.
También fomenta la definición de interfaces precisas, ya que no tiene que encontrar todas las implementaciones y etiquetarlas con el nuevo nombre de interfaz.
Todo esto suena sospechosamente como métodos de extensión en C # , excepto que los métodos en Go son implacablemente polimórficos; operarán en cualquier tipo que los implemente.
Google afirma que esto fomenta el desarrollo rápido, pero ¿por qué? ¿Renuncias a algo alejándote de las interfaces explícitas en C #? ¿Podrían los métodos de extensión en C # permitirle obtener algunos de los beneficios que tienen las interfaces Go en C #?