我想更好地了解如何使用接口,主要是在可重用组件中拆分代码,同时使其更容易进行测试,目前我的主要问题是如何在属于的接口之间共享/获取数据主界面,例如:
https://play.golang.org/p/67CQor1_pY
package main
import (
"fmt"
)
type MainInterface interface {
SubInterfaceA
SubInterfaceB
}
type SubInterfaceA interface {
MethodA()
GetterA(s implementMain)
}
type SubInterfaceB interface {
MethodB()
GetterB(s implementMain)
}
type implementA struct{}
func (ia *implementA) MethodA() { fmt.Println("I am method A") }
func (ia *implementA) GetterA(s implementMain) {
fmt.Println(s.Data)
}
type implementB struct{}
func (ib *implementB) MethodB() { fmt.Println("I am method B") }
func (ib *implementB) GetterB(s implementMain) {
fmt.Println(s.Data)
}
type implementMain struct {
Data string
SubInterfaceA
SubInterfaceB
}
func New(d string) implementMain {
return implementMain{
Data: d,
SubInterfaceA: &implementA{},
SubInterfaceB: &implementB{},
}
}
func main() {
var m MainInterface
m = New("something")
fmt.Println(m.(implementMain).Data)
m.MethodA() // prints I am method A
m.MethodB() // prints I am method B
m.GetterA(m.(implementMain)) // prints "something"
m.GetterB(m.(implementMain)) // prints "something"
}
在上面的代码中,在struct implementA
或implementB
的方法中,如何访问实现implementMain
的父拥有者MainInterface
的struct元素,而不将其传递给争论?
with holder struct我的意思是:
type implementMain struct {
Data string
SubInterfaceA
SubInterfaceB
}
如果我是正确的SubInterfaceA
并嵌入SubInterfaceB
并帮助使结构implementMain
满足MainInterface
:
type MainInterface interface {
SubInterfaceA
SubInterfaceB
}
但是在SubInterfaceA
或subInterfaceB
的嵌入式方法中,为获得data string
而使用的最佳做法是什么?
我创建了Getter(s implementMain)
方法并传递了 holder 结构,但必须转换类型:
m.GetterA(m.(implementMain))
我不知道通过满足接口,所有涉及的接口是否可以成为相同结构范围的一部分,如果它们如此,如何在它们之间或其组件之间获取/共享数据?例如,除了可以从data string
获取/访问SubInterfaceA
SubInterfaceB