亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

無法從恐慌中恢復 - 完全跳過延遲

無法從恐慌中恢復 - 完全跳過延遲

Go
慕萊塢森 2022-08-24 12:48:13
使用 io.與無效的作家一起復制,我得到恐慌 - 這是意料之中的。但是,在這種情況下,我無法恢復。我的延遲恢復完全被繞過。代碼如下:package mainimport (    "context"    "fmt"    "io"    "log"    "os"    "runtime"    "runtime/debug"    "cloud.google.com/go/storage")func main() {    var (        ctx      = context.Background()        fromFile = "blah.txt"        bucket   = "blah-bucket"        path     = "blah-path"    )    defer func() {        if result := recover(); result != nil {            buf := make([]byte, 1<<16)            length := runtime.Stack(buf, false)            log.Fatalf("PANIC RECOVER: %v\nSTACK: \n%s", result, buf[:length])            debug.PrintStack()        }    }()    err := FakeUpload(ctx, fromFile, bucket, path)    if err != nil {        fmt.Println(err)    }    fmt.Println("HELLO")}func FakeUpload(ctx context.Context, fromFile, toBucket, toPath string) (err error) {    var (        file   *os.File        client *storage.Client        wc     *storage.Writer    )    defer func() {        for _, c := range []io.Closer{wc, file} {            if c != nil {                err = c.Close()                if err != nil {                    return                }            }        }    }()    file, err = os.Open(fromFile)    if err != nil {        err = fmt.Errorf("problem opening file %v: %v", fromFile, err)        return    }    wc = client.Bucket(toBucket).Object(toPath).NewWriter(ctx)    _, err = io.Copy(wc, file) // THE UNRECOVERABLE PANIC HAPPENS HERE    return}踢球者是,如果它在其他地方恐慌,例如我指向一個無效的文件,它會恐慌,延遲恢復正確捕獲它。這讓我感到困惑。有什么想法嗎?
查看完整描述

1 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

正如你可以在上面的評論中讀到的那樣,答案是作家正在創造一個goroutine,并在那里投入恐慌。GO不允許您從另一個Goroutine中恢復。cloud.google.com/go/storage



查看完整回答
反對 回復 2022-08-24
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號