由于 Go 非常强调接口,我想知道如何明确声明一个结构正在实现一个接口,以便在某些方法丢失的情况下进行清晰和错误检查?到目前为止,我已经看到了两种方法,我想知道哪种方法是正确的并且符合 Go 规范。方法 1 - 匿名字段type Foo interface{ Foo()}type Bar struct { Foo}func (b *Bar)Foo() {}方法 2 - 显式转换type Foo interface{ Foo()}type Bar struct {}func (b *Bar)Foo() {}var _ Foo = (*Bar)(nil)这些方法是正确的,还是有其他方法可以做这样的事情?
3 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
我很少需要声明这一点,因为在我的包中几乎总是有我使用结构体作为接口的地方。我倾向于遵循在可能的情况下保持结构不公开的模式,并且仅通过“构造函数”函数提供它们。
type Foo interface{
Foo()
}
type bar struct {}
func (b *bar)Foo() {}
func NewBar() Foo{
return &bar{}
}
如果bar不满足Foo,则不会编译。我没有添加构造来声明该类型实现了接口,而是确保我的代码在某个时候将它用作接口。
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
你不能。在 Go 中,所有接口实现都是隐式的。你可以检查一个类型是否实现了一个接口(这是它得到的最明确的)。如果我在我从事的项目中没有记错的话,我们只是在包的顶部针对类型实现的接口做了一些类型断言,这与它所得到的一样接近显式。
- 3 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消