是否可以在Go中像Java/C#那样声明带有字段的接口?
大家好!我是Go新手,从Java转过来。在Java中,我习惯接口不仅可以包含方法签名,还可以包含字段(属性)。例如:
```java
public interface Animal {
String name = "Unknown";
void speak();
}
```
现在尝试在Go中做同样的事情:
```go
type Animal interface {
Name string
Speak()
}
```
编译器报错:`interface contains embedded field Name which is not a method`。我很困惑。那么在Go中如何正确描述一个保证包含特定字段的结构?我需要任何实现`Animal`接口的对象都必须有`Name`字段(字符串)。没有这个,我的程序在编译阶段就会崩溃。
我尝试过这样做:
```go
type Animal struct {
Name string
}
type Dog struct {
Animal
Speak()
}
```
但这也不起作用。请告诉我,在Go中如何正确组织对字段存在的契约?也许我只是写法不对。