2 回答
TA贡献1785条经验 获得超8个赞
您想要的看起来与功能选项模式非常相似。请记住,函数是 Go 中的一等公民,因此您可以通过函数(或struct带有 " apply" 方法的函子)传递数据。
例如:
package main
import "fmt"
type do struct{}
type DoOption func(*do)
func Do(opts ...DoOption) {
do := do{}
for _, opt := range opts {
opt(&do)
} // "apply" the options
// use the values...
}
type Foo struct{ value string }
type Bar struct{ value string }
func WithFoo(x Foo) func(*do) {
return func(*do) { fmt.Println(x.value) }
}
func WithBar(x Bar) func(*do) {
return func(*do) { fmt.Println(x.value) }
}
type dependencyContainer struct {
foo Foo
bar Bar
}
func main() {
s := dependencyContainer{Foo{"foo"}, Bar{"bar"}}
Do(WithFoo(s.foo), WithBar(s.bar))
}
https://play.golang.org/p/48rCTwn1f9C
此外,许多人认为显式依赖注入(即通过构造函数公开所有依赖项,而不是将它们隐藏在消费者代码中)会导致更好的可维护代码。
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报