No Go Language Tutorial, eles explicam como as interfaces funcionam:
Go não tem aulas. No entanto, você pode definir métodos nos tipos de estrutura. O receptor do método aparece em sua própria lista de argumentos entre a palavra-chave func e o nome do método.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Um tipo de interface é definido por um conjunto de métodos. Um valor do tipo de interface pode conter qualquer valor que implemente esses métodos.
Essa é a única maneira de criar uma interface no Go. O Google explica ainda que:
Um tipo implementa uma interface implementando os métodos. Não há declaração explícita de intenção [ie
interface
declarações].As interfaces implícitas separam os pacotes de implementação dos pacotes que definem as interfaces: nenhum depende do outro.
Também incentiva a definição de interfaces precisas, porque você não precisa encontrar todas as implementações e identificá-las com o novo nome da interface.
Tudo isso parece suspeito como Métodos de extensão em C # , exceto que os métodos em Go são implacavelmente polimórficos; eles irão operar em qualquer tipo que os implemente.
O Google alega que isso incentiva o desenvolvimento rápido, mas por quê? Você desiste de algo afastando-se de interfaces explícitas em C #? Os métodos de extensão em C # permitem derivar alguns dos benefícios que as interfaces Go têm em C #?