日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

司空見慣的錯誤檢測,原來還有這么多干貨!

來源: 責編: 時間:2024-02-01 12:48:22 245觀看
導讀一、錯誤處理機制Go 語言以結果多值返回方式處理錯誤,函數(shù)或者方法最后一個返回值作為錯誤類型。func ReadFile(filename string) ([]byte, error)調用時根據(jù)錯誤值判斷是否正常data, err := ReadFile("abc.txt")if e

一、錯誤處理機制

Go 語言以結果多值返回方式處理錯誤,函數(shù)或者方法最后一個返回值作為錯誤類型。OKz28資訊網——每日最新資訊28at.com

func ReadFile(filename string) ([]byte, error)

調用時根據(jù)錯誤值判斷是否正常OKz28資訊網——每日最新資訊28at.com

data, err := ReadFile("abc.txt")if err != nil {    // 處理錯誤} else {   // 處理data}

1. error 類型及其意義

Go 語言通過內置的 error 類型實現(xiàn)錯誤處理,它是一個接口OKz28資訊網——每日最新資訊28at.com

type error interface {    Error() string}

實現(xiàn) error 的類型都可以作為錯誤類型返回,框架會使用 Error()方法打印錯誤信息。OKz28資訊網——每日最新資訊28at.com

任意類型只要實現(xiàn)該接口就表示一個錯誤OKz28資訊網——每日最新資訊28at.com

type ParseError struct {    Filename string // 文件名    Line     int    // 錯誤行號}func (e *ParseError) Error() string {    return fmt.Sprintf("%s:%d", e.Filename, e.Line)  }

2. if err != nil 檢查錯誤

if 語句常用于判斷函數(shù)調用是否發(fā)生錯誤OKz28資訊網——每日最新資訊28at.com

file, err := os.Open("/tmp/abc.txt")if err != nil {    log.Fatal(err)}

3. 自定義錯誤類型

可自定義錯誤類型保存更多信息,自定義錯誤能更好表達錯誤場景,修正錯誤也更方便。OKz28資訊網——每日最新資訊28at.com

type NotFoundError struct {    FileName string}func (e *NotFoundError) Error() string {    return fmt.Sprintf("%s not found", e.FileName)}func find(filename string) error {    _, err := os.Stat(filename)    if err != nil {        // 創(chuàng)建自定義錯誤類型并返回        return &NotFoundError{filename}     }    return nil}

調用時可以轉換回來OKz28資訊網——每日最新資訊28at.com

err := find("hello.txt")if e, ok := err.(*NotFoundError); ok {    fmt.Println(e.FileName) }

二、defer 處理資源釋放問題

Go 語言中的 defer 語句會將函數(shù)執(zhí)行推遲到外層函數(shù)返回之前。OKz28資訊網——每日最新資訊28at.com

1. defer 的執(zhí)行規(guī)則與特點

defer 延遲調用遵循 FILO 規(guī)則。OKz28資訊網——每日最新資訊28at.com

func main() {  defer fmt.Println(1)   defer fmt.Println(2)  fmt.Println(3)   // 輸出順序是 3,2,1。}

defer 語句中的變量在定義時求值(輸出是 1,不是 2。)OKz28資訊網——每日最新資訊28at.com

func main() {  x := 1  defer fmt.Println(x)    x++      }

2. defer 釋放資源

defer 經常用于釋放資源,不管 process 返回與否,都能保證文件關閉。OKz28資訊網——每日最新資訊28at.com

func main() {  file := openFile("abc.txt")  defer file.Close()    process(file) // 使用文件}

3. defer 經典案例

讀取文件內容的示例,輸出完內容后,defer 確保文件正確關閉。OKz28資訊網——每日最新資訊28at.com

func cat(f string) error {    file, err := os.Open(f)     if err != nil {        return err    }    defer file.Close()         stat, err := file.Stat()    if err != nil {        return err    }        bs := make([]byte, stat.Size())    _, err = file.Read(bs)    if err != nil {       return err     }        fmt.Println(string(bs))    return nil}

OKz28資訊網——每日最新資訊28at.com

 三、panic 和 recover

panic 用于程序未能處理的錯誤,recover 可以讓 panic 跳出的 goroutine 恢復,防止整個程序崩潰。OKz28資訊網——每日最新資訊28at.com

1. panic、defer 和 recover 的關系

  • panic 會導致當前 goroutine 立即中止執(zhí)行,但 defer 保證執(zhí)行
  • recover 可以捕獲 panic,從而影響應用恢復

2. recover 捕獲 panic

recover 只在 defer 內調用時有效OKz28資訊網——每日最新資訊28at.com

func ProtectRun(entry func()) {   defer func() {       // 捕獲函數(shù)異常       if r := recover(); r != nil {           log.Printf("run time panic: %v", r)       }   }()   entry() // 可能引發(fā)panic的函數(shù)}

3. panic 應用場景

不希望看到 panic,但它也有合理應用場景OKz28資訊網——每日最新資訊28at.com

// 非法狀態(tài),不可能恢復panic("invalid state") // 參數(shù)校驗未過,不應繼續(xù)// 等于“拋出異常”,讓程序停下。if x <= 0 {  panic("x must > 0") }

OKz28資訊網——每日最新資訊28at.com

 四、日志的最佳實踐

log 包實現(xiàn)日志收集,支持輸出到文件,網絡等地方。OKz28資訊網——每日最新資訊28at.com

1. log 包的基本使用

導入 log 包并設置輸出位置OKz28資訊網——每日最新資訊28at.com

func main() {    log.SetOutput(os.Stdout)        log.Println("logging example")}

2. 設置日志級別,控制日志輸出

log 級別包含 Debug、Info、Warning、Error、Fatal 等。OKz28資訊網——每日最新資訊28at.com

log.SetPrefix("[Debug] ")log.SetFlags(log.Llongfile | log.LUTC) log.Println("debug message") log.Fatalln("fatal message")

Fatal 會在寫入日志后調用 os.Exit(1)。OKz28資訊網——每日最新資訊28at.com

3. 將日志寫入文件,按文件大小切分

默認日志只輸出到 stderr,可以寫入文件,超過文件限制后,將日志保存到 xx.log.1。OKz28資訊網——每日最新資訊28at.com

f, _ := os.OpenFile("/tmp/xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) log.SetOutput(f)

OKz28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-70417-0.html司空見慣的錯誤檢測,原來還有這么多干貨!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 高并發(fā)秒殺方案:熱點散列,庫存分桶,你需要了解一下

下一篇: Nuxt 3.10 正式發(fā)布,看看有什么變化!

標簽:
  • 熱門焦點
  • iPhone賣不動了!蘋果股價創(chuàng)年內最大日跌幅:市值一夜蒸發(fā)萬億元

    8月5日消息,今天凌晨美股三大指數(shù)高開低走集體收跌,道指跌0.41%;納指跌0.36%;標普500指數(shù)跌0.52%。熱門科技股也都變化極大,其中蘋果報181.99美元,跌4.8%,創(chuàng)
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創(chuàng)建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態(tài)工廠方法模式,不屬于GoF 23種設計
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數(shù)或類的行為。裝飾器本質上是一個函數(shù),它接受另一個函數(shù)或類作為參數(shù),并返回一個新的函數(shù)或類。它們通常用
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發(fā)生
  • JVM優(yōu)化:實戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創(chuàng)始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • Android 14發(fā)布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發(fā)布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發(fā)布了Androi
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購買

    2022年1月份在國際消費電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現(xiàn)在已經可以購買了,這款筆記本電腦被譽為世界上最薄的 14 英寸游戲筆
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国内精品一区二区三区| 欧美另类专区| 欧美亚洲自偷自偷| 久久爱另类一区二区小说| 久久国产精品第一页| 开元免费观看欧美电视剧网站| 欧美阿v一级看视频| 欧美日韩中文字幕在线| 国产女主播一区| 伊人久久大香线蕉av超碰演员| 亚洲国产成人av好男人在线观看| 亚洲精品欧美日韩专区| 亚洲欧美www| 免播放器亚洲一区| 国产精品二区二区三区| 国内精品久久久久伊人av| 最近中文字幕日韩精品| 亚洲欧美成人一区二区在线电影| 久久久久久亚洲精品不卡4k岛国| 欧美另类视频| 国产在线观看91精品一区| 日韩午夜一区| 久久精品国产在热久久 | 欧美精品综合| 国产伦精品一区二区三区| 亚洲高清不卡在线观看| 亚洲免费视频观看| 欧美成人激情在线| 国产精品夜夜夜| 亚洲三级影片| 久久精品官网| 欧美性大战久久久久久久蜜臀| 激情欧美一区二区三区| 中文精品视频| 免费观看久久久4p| 国产日韩欧美制服另类| 中文一区二区| 国产一区二区三区四区hd| 亚洲黄色大片| 久久久99爱| 国产精品一区二区久久久| 亚洲人久久久| 久久在线视频| 国产精品色午夜在线观看| 亚洲精品国产无天堂网2021| 久久gogo国模裸体人体| 欧美无砖砖区免费| 亚洲免费av片| 欧美88av| **网站欧美大片在线观看| 欧美一区二区大片| 欧美三区在线视频| 亚洲欧洲偷拍精品| 久久影视精品| 国产自产在线视频一区| 香蕉av福利精品导航| 国产精品成人观看视频免费 | 欧美午夜视频在线| 亚洲国产精品电影| 久久久五月天| 国产一区二区精品久久99| 亚洲一区二区三区在线观看视频 | 欧美精品免费看| 亚洲国产精品久久久久久女王| 久久狠狠亚洲综合| 国产欧美日韩综合精品二区| 亚洲在线中文字幕| 国产精品国产三级国产a| 99精品国产一区二区青青牛奶 | 国产在线不卡| 小嫩嫩精品导航| 国产精品亚洲综合久久| 亚洲一区二区在线看| 欧美日韩在线视频首页| 日韩视频不卡中文| 欧美日韩国产91| 99视频超级精品| 欧美日韩亚洲国产一区| 99国产精品国产精品久久| 欧美日韩高清免费| 日韩亚洲一区二区| 欧美日韩无遮挡| 一区二区三区高清不卡| 欧美色播在线播放| 日韩午夜中文字幕| 欧美午夜片欧美片在线观看| 亚洲视频播放| 国产精品人人做人人爽| 欧美一区二区观看视频| 国产自产精品| 久热精品在线视频| 亚洲狠狠丁香婷婷综合久久久| 欧美成人午夜视频| 亚洲美女精品一区| 欧美午夜精品理论片a级大开眼界| 亚洲视频在线观看三级| 国产精品欧美日韩久久| 欧美一区二区视频97| 国产一区导航| 毛片基地黄久久久久久天堂| 亚洲欧洲一区二区三区| 欧美极品在线观看| 亚洲一二区在线| 国产主播一区二区| 欧美91精品| 国产精品99久久久久久人| 国产精品亚洲第一区在线暖暖韩国| 欧美伊人久久久久久久久影院| 在线观看视频免费一区二区三区| 欧美电影免费观看| 亚洲网址在线| 国产一级揄自揄精品视频| 久久阴道视频| 一本久久a久久精品亚洲| 国产精品免费小视频| 久久精品在这里| 亚洲精品久久久久久久久久久久久 | 久久成人18免费网站| 在线观看三级视频欧美| 欧美日韩一卡二卡| 久久国产夜色精品鲁鲁99| 91久久久亚洲精品| 国产精品九九久久久久久久| 久久9热精品视频| 亚洲精品免费网站| 国产精品资源在线观看| 玖玖视频精品| 亚洲一级在线| 激情久久久久久久| 欧美日韩伦理在线免费| 久久高清福利视频| 日韩一级黄色片| 国产一区二区三区观看| 欧美精品一区二| 欧美自拍偷拍| 99精品福利视频| 精品96久久久久久中文字幕无| 欧美日韩精品不卡| 久久久欧美精品| 亚洲综合色网站| 亚洲国产综合91精品麻豆| 国产精品国产三级欧美二区| 蜜臀99久久精品久久久久久软件 | 亚洲影视在线播放| 尤物九九久久国产精品的特点| 欧美日韩免费| 久久先锋资源| 亚洲一区二区精品在线观看| 在线播放日韩| 国产精品一区久久久| 欧美久久成人| 久久久久国产一区二区三区四区| 日韩视频一区二区三区| 国内精品伊人久久久久av影院| 欧美日韩精品一本二本三本| 久久精品国产精品亚洲| 中文在线资源观看视频网站免费不卡| 在线观看精品视频| 国产欧美亚洲日本| 欧美日韩一区二区三区四区在线观看 | 久久精品亚洲国产奇米99| 宅男精品视频| 亚洲日本va午夜在线影院| 国产中文一区二区三区| 国产精品捆绑调教| 欧美精品一区二区三区四区| 久久一区视频| 久久久久综合网| 欧美一区二区视频在线| 亚洲天堂免费在线观看视频| 亚洲免费大片| 亚洲精品乱码久久久久| 一区在线免费观看| 国产色产综合产在线视频| 欧美午夜女人视频在线| 欧美精品在线视频| 欧美 日韩 国产一区二区在线视频| 欧美在线观看一区二区三区| 亚洲一区视频| 一区二区三区|亚洲午夜| 亚洲人成在线免费观看| 亚洲成色精品| 在线观看欧美精品| 激情视频一区二区| 狠狠操狠狠色综合网| 国产日韩欧美中文| 国产九九精品视频| 国产精品美女黄网| 国产精品久久97| 国产精品v欧美精品v日韩精品| 欧美日韩国产天堂| 欧美另类久久久品| 欧美日韩国产成人高清视频| 欧美精品18videos性欧美| 欧美成人免费小视频| 欧美xart系列高清| 欧美国产大片| 欧美日韩高清在线| 欧美日韩精品免费在线观看视频| 欧美紧缚bdsm在线视频| 欧美区在线播放| 欧美日韩免费一区| 欧美日韩免费观看一区二区三区 | 亚洲视频中文|