¿Se puede declarar una interfaz con campos en Go, como en Java/C#?
¡Hola a todos! Soy nuevo en Go, vengo de Java. Allí estaba acostumbrado a que una interfaz puede contener no solo firmas de métodos, sino también campos (propiedades). Por ejemplo:
```java
public interface Animal {
String name = "Unknown";
void speak();
}
```
Ahora intento hacer lo mismo en Go:
```go
type Animal interface {
Name string
Speak()
}
```
El compilador da un error: `interface contains embedded field Name which is not a method`. Estoy desconcertado. ¿Cómo se describe correctamente en Go una estructura que garantice que contiene ciertos campos? Necesito que cualquier objeto que implemente la interfaz `Animal` tenga obligatoriamente un campo `Name` (cadena). Sin esto, mi programa se rompe en la etapa de compilación.
Intenté hacerlo así:
```go
type Animal struct {
Name string
}
type Dog struct {
Animal
Speak()
}
```
Pero tampoco funciona. Por favor, indíquenme cómo organizar correctamente en Go un contrato para la presencia de un campo. ¿Quizás simplemente estoy escribiendo mal?