一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - Go語言錯(cuò)誤處理異常捕獲+異常拋出

Go語言錯(cuò)誤處理異常捕獲+異常拋出

2022-02-25 23:56酷爾。 Golang

這篇文章主要介紹了Go語言錯(cuò)誤處理異常捕獲和異常拋出,Go語言的作者認(rèn)為java等語言的錯(cuò)誤處理底層實(shí)現(xiàn)較為復(fù)雜,就實(shí)現(xiàn)了函數(shù)可以返回錯(cuò)誤類型以及簡單的異常捕獲,雖然簡單但是也非常精妙,大大的提高了運(yùn)行效率,下文需要的

前言:

Go 語言追求簡潔優(yōu)雅,所以,Go 語言不支持傳統(tǒng)的 try…catch…finally 這種處理。
Go 中引入的錯(cuò)誤處理方式為:defer, panic, recover,也僅僅是錯(cuò)處處理的模擬
Go語言的作者認(rèn)為java等語言的錯(cuò)誤處理底層實(shí)現(xiàn)較為復(fù)雜,就實(shí)現(xiàn)了函數(shù)可以返回錯(cuò)誤類型以及
簡單的異常捕獲,雖然簡單但是也非常精妙,大大的提高了運(yùn)行效率。

一、error變量可以做什么

1.定義一個(gè)error變量

①直接new一個(gè)

err := errors.New("我是錯(cuò)誤處理語句")

②實(shí)現(xiàn)Error接口

只要實(shí)現(xiàn)了Error接口就可以被error類型所接收,打印的時(shí)候會(huì)直接打印實(shí)現(xiàn)接口時(shí),方法返回的字符串。

官方接口如下:

?
1
2
3
type error interface {
    Error() string
}

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//定義一個(gè)結(jié)構(gòu)體
type man struct {
    age int
}
//實(shí)現(xiàn)接口
func (a man) Error() string {
    str := "這是一個(gè)錯(cuò)誤接口"
    return str
}
//創(chuàng)建函數(shù)返回錯(cuò)誤類型
func judgeAge() (int, error) {
    var a man
    return 0, a
}
//主函數(shù)調(diào)用
func main() {
    _, e := judgeAge()
    if e!=nil{
        fmt.Println(e)
    }
}

2.錯(cuò)誤的處理

    將如果錯(cuò)誤變量不為空,則將錯(cuò)誤進(jìn)行捕獲打印,這里直接打印到了控制臺(tái),可以將錯(cuò)誤打印到日志文件內(nèi),為以后系統(tǒng)的維護(hù)做保障。

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import (
    "errors"
    "fmt"
)
 
func main() {
    err := errors.New("我是錯(cuò)誤處理語句")
    if err != nil {
        fmt.Println(err)
    }else {
        fmt.Println("沒有錯(cuò)誤")
    }
    fmt.Println(123)
}

3.做函數(shù)返回值

  • 如果函數(shù)返回的錯(cuò)誤類型值不為空,則將其進(jìn)行打印

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
 
import (
    "errors"
    "fmt"
)
 
func test(num1,num2 int) error {
    if num2 == 0 {
        return errors.New("除數(shù)為零")
    }
    res := num1 / num2
    fmt.Println("計(jì)算結(jié)果為=", res)
    return nil
 
}
func main() {
    err := test(11,0)
    if err!=nil{
        fmt.Println(err)
    }
}

4.做函數(shù)參數(shù)

一般用作處理錯(cuò)誤變量,在需要進(jìn)行錯(cuò)誤檢驗(yàn)的時(shí)候調(diào)用函數(shù),不用再進(jìn)行判斷了

代碼如下:

?
1
2
3
4
5
func PrintError(err error){
    if err!=nil{
        fmt.Println(err)
    }
}

二、模擬異常的捕獲與拋出

1.defer簡介

 defer后面定義的東西是在調(diào)用函數(shù)執(zhí)行完的時(shí)候執(zhí)行的代碼,一般用于文件描述符、數(shù)據(jù)庫對(duì)象的關(guān)閉(在之前講管道的時(shí)候有介紹過)

 defer什么什么延時(shí)執(zhí)行

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
func pDefer() {
    defer fmt.Println("hahaha")
    fmt.Println("hello")
}
func main() {
    pDefer()
}
/*
打印結(jié)果
    hello
    hahaha
*/

2.使用recover模擬異常的捕獲

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main
 
import (
    "fmt"
)
 
func test() {
    //使用defer + recover 來捕獲和處理異常(返回錯(cuò)誤變量)
    //函數(shù)執(zhí)行末尾執(zhí)行這個(gè)匿名函數(shù)
     defer func() {
         err := recover() // recover()內(nèi)置函數(shù),可以捕獲到異常
         if err != nil {  //說明捕獲到錯(cuò)誤
             fmt.Println(err)
         }
     }()
    num1 := 10
    num2 := 0
    res := num1 / num2
    fmt.Println("計(jì)算結(jié)果為=", res)
 
}
func main() {
    test()
}

3.使用panic主動(dòng)拋出錯(cuò)誤

異常的捕獲,使程序還能夠正常的運(yùn)行,如果有致命錯(cuò)誤就需要進(jìn)行錯(cuò)誤的拋出了,也就是宕機(jī),不到迫不得已千萬不要使用這個(gè)函數(shù),有可能會(huì)造成大量數(shù)據(jù)的丟失

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main
 
import (
    "errors"
    "fmt"
)
 
func test() error {
    num1 := 10
    num2 := 0
    if num2 == 0 {
        return errors.New("除數(shù)為零")
    }
    res := num1 / num2
    fmt.Println("計(jì)算結(jié)果為=", res)
    return nil
 
}
 
 
func main() {
    //無論err是否為空,都進(jìn)行程序的終止
     panic(test())//內(nèi)置函數(shù)2,參數(shù)使一個(gè)interface接口
}

運(yùn)行結(jié)果:

Go語言錯(cuò)誤處理異常捕獲+異常拋出

總結(jié):

Go語言雖然沒有一個(gè)較為成熟的異常捕獲機(jī)制,但是其精簡的錯(cuò)誤處理仍舊能夠滿足其需求,減少錯(cuò)誤的處理大大的加快了我們的開發(fā)效率,代碼的運(yùn)行效率。

到此這篇關(guān)于Go語言錯(cuò)誤處理異常捕獲+異常拋出的文章就介紹到這了,更多相關(guān)Go語言異常捕獲和異常拋出內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/apple_51931783/article/details/122573931

延伸 · 閱讀

精彩推薦
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說起,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看...

    Go語言中文網(wǎng)11352020-05-21
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
主站蜘蛛池模板: 亚洲日韩中文字幕一区 | 日本海鸣馆 | 精品久久成人免费第三区 | 国产精品吹潮香蕉在线观看 | 精品福利一区 | 99精品视频在线观看免费播放 | a黄色 | 亚欧毛片基地国产毛片基地 | 男人肌肌捅女人肌肌 | 欧美香蕉人人人人人人爱 | www.青草视频 | 日本肉体xxxx | 丝袜高跟小说 | a级精品九九九大片免费看 a级动漫 | sedog在线长片 | 成人精品亚洲 | 明星乱淫 | 欧美亚洲欧美 | 欧美一区二区三区免费观看视频 | 成在线人免费视频一区二区三区 | 欧美腐剧mm在线观看 | 日本高清二三四本2021 | 四虎884aa永久播放地址http | 校服下的白嫩小乳尖h1v1 | free白嫩性hd| 国产91精选学生在线观看 | 99久久精品国产一区二区 | 性一交一无一伦一精一品 | 久久精品亚洲国产AV涩情 | 亚洲高清国产拍精品动图 | 深夜免费网站 | 白白国产永久免费视频 | 日本高清视频网址 | 麻豆小视频在线观看 | 大象传媒2021秘密入口 | 国产精品最新资源网 | 99国产在线视频 | 小妇人电影免费完整观看2021 | 99久久精品国产免看国产一区 | 日本zzzzwww大片免费 | poren黑人 |