golang中處理panic的正確姿勢


golang中panic的處理沒有其他語言中try-catch語法那么簡單。
大部分例子的panic處理都是在退出環節。那么如何在正常業務流程中處理panic,然后不影響全局呢?

// 業務處理1,定義myStrcture

isDone := make(chan int)
go func() {
    defer func() {
        if err := recover(); err != nil {
            log.E(this.Ctx, "Skip panic", "tmpInfo=[%+v]", tmpInfo)
        }
        isDone <- 1
    }()
    myStrcture.Ip = tmpInfo.Ip
    myStrcture.Country = tmpInfo.Address.Country.Name //可能panic
    myStrcture.Province = tmpInfo.Address.Province.Name
    myStrcture.City = tmpInfo.Address.City.Name
    myStrcture.District = tmpInfo.Address.District.Name
}()
<-isDone

// 業務處理2
// 返回 myStrcture

References

  1. 關於golang的panic recover異常錯誤處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM