2 回答
TA贡献1780条经验 获得超3个赞
一种方法是使用带有回调的“初始化程序”函数:
func WithResources(f func(Resource1, Resource2)) {
r1:=NewResource1()
defer r1.Close()
r2:=NewResource2()
defer r2.Close()
f(r1,r2)
}
func F() {
WithResources(func(r1 Resource1, r2 Resource2) {
// Use r1, r2
})
}
函数的签名f取决于您的确切用例。
另一种方法是对资源集使用结构:
type Resources struct {
R1 Resource1
R2 Resource2
...
}
func NewResources() *Resources {
r:=&Resources{}
r.R1=NewR1()
r.R2=NewR2()
return r
}
func (r *Resources) Close() {
r.R1.Close()
r.R2.Close()
}
func f() {
r:=NewResources()
defer r.Close()
...
}
TA贡献1951条经验 获得超3个赞
将所有这些包装在一个函数中会很棒。
很可能很多人会讨厌阅读这样的代码。所以“精彩”可能是非常主观的。
但是,这样做会在函数调用结束后立即关闭资源。
确切地。
有没有办法解决 [...]?
不。
- 2 回答
- 0 关注
- 82 浏览
添加回答
举报