2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
一種方法是使用帶有回調(diào)的“初始化程序”函數(shù):
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
})
}
函數(shù)的簽名f取決于您的確切用例。
另一種方法是對(duì)資源集使用結(jié)構(gòu):
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貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
將所有這些包裝在一個(gè)函數(shù)中會(huì)很棒。
很可能很多人會(huì)討厭閱讀這樣的代碼。所以“精彩”可能是非常主觀的。
但是,這樣做會(huì)在函數(shù)調(diào)用結(jié)束后立即關(guān)閉資源。
確切地。
有沒(méi)有辦法解決 [...]?
不。
- 2 回答
- 0 關(guān)注
- 100 瀏覽
添加回答
舉報(bào)