说我有以下结构
package foobar
type Foo struct{}
type Bar struct{}
func (*Bar) Read(p []byte) (n int, err error) {
return 0, nil
}
在我的应用程序的某个地方,我打算像这样使用这些结构之一
package consumer
type DoOptions struct {
bar io.Reader
}
func Do(opts *DoOptions) {
fmt.Println(opts)
}
我的目标是拥有一个通用的依赖容器,并让客户规定他们希望从中获取哪些依赖。
package main
type dependencyContainer struct {
foo *Foo
bar *Bar
}
func main() {
s := &dependencyContainer{
foo: &foobar.Foo{},
bar: &foobar.Bar{},
}
consumer.Do(s)
}
但当然这不起作用:
cannot use s (variable of type *dependencyContainer) as *DoOptions value in argument to consumer
我有什么办法可以做到这一点吗?
寻找替代品,它们都很笨拙。
接口中只能有方法
context.Context意味着大量不必要的强制转换,并且函数的 API 变得混乱
当您在依赖关系图中钻取属性时,拥有多个函数参数可以通过导入顺序和重复进行高度维护
慕的地10843
白衣染霜花
相关分类