我目前正在清理一些 golang 代码。该代码处理许多以相似方式运行并共享一些相似数据字段的结构。我想知道是否可以同时指定一个公共(public)结构和接口(interface)?像这样的东西:
type Foo struct {
Bar string
BarTheFoo() string
}
func (f Foo)FooBar() string {
BarTheFoo()
return f.Bar
}
这意味着从 Foo 继承的任何其他结构都将在其中包含 Bar 变量,但它还应该实现自己的 BarTheFoo() 函数。知道所有 Foo 导数都有 BarTheFoo(),我想在一个函数中使用它,我知道每个 Foo 导数看起来都一样。
在 Go 中有这样的可能吗?
最佳答案
是的,但为了完全理解它,我认为您需要摆脱那些继承的概念,因为它们在 Go 中不存在。您可以做的最接近的事情是在所有类型(包括 Foo
)中“嵌入”Bar
。
此功能有点像继承和组合的混合体。虽然 Foo
类型在技术上将由 Bar
类型(以及其他字段)“组合”,但 Bar
类型的方法在sense 提升,以便可以直接从 Foo
调用它们。看起来像这样;
type Foo struct {
Bar
}
type Bar struct {
// pretend this type is useful
}
func (b Bar)FooBar() string {
// pretend this is useful
return b.ThatProperty
}
然后在其他一些情况下你可以这样做;
f := &Foo{}
f.Bar()
我不确定这正是你想要做的,我可以在更多指导下进行编辑,但我无法具体回答你的问题,因为你所问的在 Go 中不存在。
关于object - 是否可以在golang中同时指定带变量的结构和接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442849/