欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GO語言異常處理機(jī)制panic和recover分析

 更新時(shí)間:2014年12月03日 15:15:09   投稿:shichen2014  
這篇文章主要介紹了GO語言異常處理機(jī)制panic和recover,分析了捕獲運(yùn)行時(shí)發(fā)生錯誤的方法,是非常實(shí)用的技巧,需要的朋友可以參考下

本文實(shí)例分析了GO語言異常處理機(jī)制panic和recover。分享給大家供大家參考。具體如下:

Golang 有2個(gè)內(nèi)置的函數(shù) panic() 和 recover(),用以報(bào)告和捕獲運(yùn)行時(shí)發(fā)生的程序錯誤,與 error 不同,panic-recover 一般用在函數(shù)內(nèi)部。一定要注意不要濫用 panic-recover,可能會導(dǎo)致性能問題,我一般只在未知輸入和不可靠請求時(shí)使用。

golang 的錯誤處理流程:當(dāng)一個(gè)函數(shù)在執(zhí)行過程中出現(xiàn)了異常或遇到 panic(),正常語句就會立即終止,然后執(zhí)行 defer 語句,再報(bào)告異常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函數(shù),則會捕獲錯誤信息,使該錯誤信息終止報(bào)告。

示例:

復(fù)制代碼 代碼如下:
package main

import (
 "log"
 "strconv"
)

//捕獲因未知輸入導(dǎo)致的程序異常
func catch(nums ...int) int {
 defer func() {
  if r := recover(); r != nil {
   log.Println("[E]", r)
  }
 }()

 return nums[1] * nums[2] * nums[3] //index out of range
}

//主動拋出 panic,不推薦使用,可能會導(dǎo)致性能問題
func toFloat64(num string) (float64, error) {
 defer func() {
  if r := recover(); r != nil {
   log.Println("[W]", r)
  }
 }()

 if num == "" {
  panic("param is null") //主動拋出 panic
 }

 return strconv.ParseFloat(num, 10)
}

func main() {
 catch(2, 8)
 toFloat64("")
}


輸出如下:

2014/11/01 22:54:23 [E] runtime error: index out of range
2014/11/01 22:54:23 [W] param is null

希望本文所述對大家的GO語言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼

    Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼

    bcrypt可以用于數(shù)據(jù)庫中的用戶密碼保存,相比md5而言更加的安全可靠,這篇文章主要介紹了Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼,需要的朋友可以參考下
    2024-05-05
  • Go中的字典Map增刪改查、排序及其值類型

    Go中的字典Map增刪改查、排序及其值類型

    本文詳細(xì)介紹了Go語言中Map的基本概念、聲明初始化、增刪改查操作、反轉(zhuǎn)、排序以及如何判斷鍵是否存在等操作,Map是一種基于鍵值對的無序數(shù)據(jù)結(jié)構(gòu),鍵必須是支持相等運(yùn)算符的類型,值可以是任意類型,初始化Map時(shí)推薦指定容量以提高性能
    2024-09-09
  • go語言如何導(dǎo)入和使用包示例詳解

    go語言如何導(dǎo)入和使用包示例詳解

    這篇文章主要為大家介紹了go語言如何導(dǎo)入和使用包示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 簡介Go語言中的select語句的用法

    簡介Go語言中的select語句的用法

    這篇文章主要介紹了簡介Go語言中的select語句的用法,是golang入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Go語言實(shí)現(xiàn)百萬級WebSocket連接架構(gòu)設(shè)計(jì)及服務(wù)優(yōu)化

    Go語言實(shí)現(xiàn)百萬級WebSocket連接架構(gòu)設(shè)計(jì)及服務(wù)優(yōu)化

    本文將詳細(xì)介紹如何在Go中構(gòu)建一個(gè)能夠支持百萬級WebSocket連接的服務(wù),包括系統(tǒng)架構(gòu)設(shè)計(jì)、性能優(yōu)化策略以及具體的實(shí)現(xiàn)步驟和代碼示例
    2024-01-01
  • golang文件讀取-按指定BUFF大小讀取方式

    golang文件讀取-按指定BUFF大小讀取方式

    這篇文章主要介紹了golang文件讀取-按指定BUFF大小讀取方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang中"var"與":="的區(qū)別解析

    golang中"var"與":="的區(qū)別解析

    這篇文章主要介紹了golang中“var”與“:=”的區(qū)別,使用var關(guān)鍵字是Go最基本的定義變量方式,有時(shí)也會使用到:=來定義變量,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Go中recover與panic區(qū)別詳解

    Go中recover與panic區(qū)別詳解

    這篇文章主要介紹了Go中recover與panic區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Go??import _ 下劃線使用

    Go??import _ 下劃線使用

    這篇文章主要為大家介紹了Go??import下劃線_使用小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Golang控制通道實(shí)現(xiàn)協(xié)程等待詳解

    Golang控制通道實(shí)現(xiàn)協(xié)程等待詳解

    這篇文章主要介紹了Golang控制通道實(shí)現(xiàn)協(xié)程等待,通道是Go語言程序的并發(fā)體goroutine是它們之間的通信機(jī)制。一個(gè)通道是一個(gè)通信機(jī)制,它可以讓一個(gè)goroutine通過它給另一個(gè)goroutine發(fā)送值信息。每個(gè)通道都有一個(gè)特殊的類型,也就是channels可發(fā)送數(shù)據(jù)的類型
    2022-11-11

最新評論