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

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

恐慌處理或發(fā)生了什么

恐慌處理或發(fā)生了什么

Go
阿晨1998 2021-12-13 10:50:59
我不明白處理恐慌的最佳方法是什么。我可以編寫自己的代碼panic("bad data or empty source"),我將確定代碼在這個確切位置失敗的輸出,但是如何處理不是我的方法中生成的恐慌?,F(xiàn)在我有這樣的錯誤:C:/gocode/src/github.com/revel/revel/panic.go:26 (0x4975a4) handleInvocationPanic: c.Response.Out.Write(debug.Stack()) C:/gocode/src/github.com/revel/revel/panic.go:12 (0x4b60ca) PanicFilter.func1: handleInvocationPanic(c, err) c:/go/src/runtime/asm_amd64.s:437 (0x45cc75) call32: CALLFN(·call32, 32) c:/go/src/runtime/panic.go:423 (0x42ec17) gopanic: reflectcall(nil, unsafe.Pointer(d.fn), deferArgs(d), uint32(d.siz), uint32(d.siz)) C:/gocode/src/github.com/revel/revel/intercept.go:93 (0x4b6061) InterceptorFilter.func1: panic(err)c:/go/src/runtime/asm_amd64.s:437 (0x45cc75) call32: CALLFN(·call32, 32)c:/go/src/runtime/panic.go:423 (0x42ec17) gopanic: reflectcall(nil, unsafe.Pointer(d.fn), deferArgs(d), uint32(d.siz), uint32(d.siz))c:/go/src/runtime/panic.go:42 (0x42d280) panicmem: panic(memoryError)c:/go/src/runtime/signal_windows.go:161 (0x44233d) sigpanic: panicmem()C:/gocode/src/github.com/oculus/libs/funcs.go:13 (0x4e0ca5) GetDatesInRange: fmt.Println(err.Error())C:/gocode/src/github.com/oculus/rest/app/controllers/kpi.go:97 (0x4e3b2f) KpiCtrl.GetNoagg: dates, errors := libs.GetDatesInRange(request.Filters.DayStart, request.Filters.DayEnd) :97 (0x4e9f12)c:/go/src/runtime/asm_amd64.s:437 (0x45cc75) call32: CALLFN(·call32, 32)c:/go/src/reflect/value.go:432 (0x471591) Value.call: call(frametype, fn, args, uint32(frametype.size), uint32(retOffset))c:/go/src/reflect/value.go:300 (0x470258) Value.Call: return v.call("Call", in)我應(yīng)該如何與他們合作,或者如何確定問題出在哪里。這對我來說不是信息性的。
查看完整描述

2 回答

?
偶然的你

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

在Go你必須從恐慌中恢復(fù)過來,它確實包含了恐慌的錯誤信息的可能性?;謴?fù)后,您可以分析發(fā)生恐慌的問題。要從恐慌中恢復(fù),您可以使用defer語句,顧名思義,它會延遲語句的執(zhí)行。這意味著你可以跳過一些事件來掛斷系統(tǒng),這不是一個很好的解決方案。最好的解決方案是捕獲錯誤并充分處理它們。如果錯誤發(fā)生在某些第三方框架上,則應(yīng)由其創(chuàng)建者解決。如果不是,您應(yīng)該檢查為什么您的代碼會出現(xiàn)恐慌。


這是恐慌恢復(fù)的代碼片段:


defer func() {

    if err := recover(); err != nil {

        fmt.Printf("Recovered from panic. %s", err)

    }

}()

這是一個簡單的示例,說明如何在恐慌和恢復(fù)方法中使用構(gòu)建:


package main


import "fmt"


func badCall() {

    panic("Bad call happend!")

}


func test() {

    defer func() {

        if err := recover(); err != nil {

            fmt.Printf("Panicking %s\n\r" , err)

        }

    }()


    badCall()

    fmt.Println("This is never executed!!")

}


func main() {

    fmt.Println("Start testing")

    test()

    fmt.Println("End testing")

}

http://play.golang.org/p/Uz9W76SfRT


如果在延遲函數(shù)內(nèi)調(diào)用了recover,則堆棧將停止展開并返回interface{}傳遞給panic的值(作為?。_@意味著您可以將接口作為參數(shù)傳遞給 panic 方法,例如:


type ParseError struct {

    Index int    // The index into the space-separated list of words.

    Word  string // The word that generated the parse error.

    Error error  // The raw error that precipitated this error, if any.

}


// String returns a human-readable error message.

func (e *ParseError) String() string {

    return fmt.Sprintf("pkg: error parsing %q as int", e.Word)

}


// ... some code

if err != nil {

    panic(&ParseError{idx, field, err})

}

// ... some code

然后就可以分析 deferred 語句中傳入的接口了。


閱讀這篇文章:https : //github.com/golang/go/wiki/PanicAndRecover


查看完整回答
反對 回復(fù) 2021-12-13
?
倚天杖

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

您可以使用這段代碼并將其放置在每個函數(shù)中


defer func() {

  if err := recover(); err != nil {

    fmt.Println("Panic Occured and Recovered in, Error Info: ", err)

  }

}()

試試這個它會為你工作。


查看完整回答
反對 回復(fù) 2021-12-13
  • 2 回答
  • 0 關(guān)注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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