Erro "ponteiro para interface, não interface": como passar interfaces corretamente em Go?
Olá a todos! Sou novo em Go e me deparei com um erro de compilação estranho: «*MyInterface is pointer to interface, not interface».\n\nEu tenho uma interface e uma struct que a implementa:\n\n```go\ntype Animal interface {\n Speak() string\n}\n\ntype Dog struct{}\n\nfunc (d *Dog) Speak() string {\n return "Woof!"\n}\n```\n\nQuero passar um ponteiro para a struct para uma função que aceita a interface:\n\n```go\nfunc MakeSound(a Animal) {\n fmt.Println(a.Speak())\n}\n\nfunc main() {\n dog := &Dog{}\n MakeSound(dog) // funciona\n}\n```\n\nMas se eu tento passar um **ponteiro para a interface** (por algum motivo), recebo o erro:\n\n```go\nfunc main() {\n var animalInterface Animal\n animalInterface = &Dog{}\n MakeSound(&animalInterface) // erro: cannot use &animalInterface (variable of type *Animal) as type Animal in argument to MakeSound\n}\n```\n\nPor que isso acontece? Qual é a diferença entre passar `*Dog` (que implementa a interface) e `*Animal` (ponteiro para a interface)?