第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于抽象資源分配/解除分配的慣用 Go

用于抽象資源分配/解除分配的慣用 Go

Go
UYOU 2021-10-04 18:17:12
是否有一種慣用的 Go 方法來抽象資源分配/解除分配?我最初的猜測是在高階函數(shù)中抽象分配/解除分配:func withResource(f func(Resource)error) error {    // allocate resource    // defer free resource    return f(resource)}然而,這種思路是直接從函數(shù)范式中借來的,似乎與 Go 的命令式本質(zhì)不太吻合。作為一個具體的例子,在代碼塊的持續(xù)時間內(nèi)運行守護程序是我當(dāng)前項目中反復(fù)出現(xiàn)的主題,因此我創(chuàng)建了一個withDaemon函數(shù)來抽象共性:func withDaemon(    cmd *exec.Cmd,    f func(io.ReadCloser, io.ReadCloser, io.WriteCloser) error,) error {    stdout, err := cmd.StdoutPipe()    if err != nil {        return fmt.Errorf("couldn't get stdout: %v", err)    }    stderr, err := cmd.StdoutPipe()    if err != nil {        return fmt.Errorf("couldn't get stderr: %v", err)    }    stdin, err := cmd.StdinPipe()    if err != nil {        return fmt.Errorf("couldn't get stdin: %v", err)    }    if err := cmd.Start(); err != nil {        return fmt.Errorf("failed to start: %v", err)    }    defer func() {        cmd.Process.Kill()        cmd.Wait()    }    return f(stdout, stderr, stdin)}
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

我認為慣用的方法是創(chuàng)建一個守護進程類型,并在調(diào)用者中使用 defer:


d := NewDaemon(...)

defer d.Stop()

doWhatever()


查看完整回答
反對 回復(fù) 2021-10-04
  • 1 回答
  • 0 關(guān)注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號