【发布时间】:2021-05-09 19:10:11
【问题描述】:
我有一个使用如下结构的项目:
type I interface {
GetName() string
DoSomething()
}
//
// A implements I
//
type A struct {
Name string
}
func (a *A) GetName() string {
return a.Name
}
func (a *A) DoSomething() {
...do something
}
//
// B implements I
//
type B struct {
Name string
}
func (b *B) GetName() string {
return b.Name
}
func (b *B) DoSomething() {
...do something
}
func (b *B) DoSomethingElse() {
...do something else
}
//
// Both
//
func UseAorB(T I) {
name := T.GetName()...
}
- 在采用接口 I 的函数中调用时,使用 GetName 是从结构 A 或 B 获取名称字段的最佳方式吗?
- 我是否必须每次都为要实现接口的每个事物重新定义 DoSomething?或者如果 DoSomething 每次我都可以定义一次时都相同,是否有更好的方法来做到这一点?
- 结构 B 有一个接口未定义的方法 (DoSomethingElse)。我是否需要使用反射才能将 Struct B 传递给使用接口 I 调用 DoSomethingElse 的函数?还是应该定义一个包含此方法的新接口?
我想提高我的代码质量并编写一个可靠的库,但我不得不说这感觉就像我在与语言作斗争并使我的生活变得更加困难。
【问题讨论】:
-
如果接口的每个实现都完全相同,那可能意味着你不需要接口。
-
除非您对
DoSomething的实际作用做出一些解释,否则很难建议您应该使用哪种结构。
标签: go