2 回答

TA貢獻1780條經驗 獲得超4個贊
一種方法是使用帶有回調的“初始化程序”函數:
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 關注
- 106 瀏覽
添加回答
舉報