激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

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

服務器之家 - 腳本之家 - Golang - Go語言錯誤處理異常捕獲+異常拋出

Go語言錯誤處理異常捕獲+異常拋出

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

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

前言:

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

一、error變量可以做什么

1.定義一個error變量

①直接new一個

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

②實現Error接口

只要實現了Error接口就可以被error類型所接收,打印的時候會直接打印實現接口時,方法返回的字符串。

官方接口如下:

?
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
//定義一個結構體
type man struct {
    age int
}
//實現接口
func (a man) Error() string {
    str := "這是一個錯誤接口"
    return str
}
//創建函數返回錯誤類型
func judgeAge() (int, error) {
    var a man
    return 0, a
}
//主函數調用
func main() {
    _, e := judgeAge()
    if e!=nil{
        fmt.Println(e)
    }
}

2.錯誤的處理

    將如果錯誤變量不為空,則將錯誤進行捕獲打印,這里直接打印到了控制臺,可以將錯誤打印到日志文件內,為以后系統的維護做保障。

代碼如下:

?
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("我是錯誤處理語句")
    if err != nil {
        fmt.Println(err)
    }else {
        fmt.Println("沒有錯誤")
    }
    fmt.Println(123)
}

3.做函數返回值

  • 如果函數返回的錯誤類型值不為空,則將其進行打印

代碼如下:

?
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("除數為零")
    }
    res := num1 / num2
    fmt.Println("計算結果為=", res)
    return nil
 
}
func main() {
    err := test(11,0)
    if err!=nil{
        fmt.Println(err)
    }
}

4.做函數參數

一般用作處理錯誤變量,在需要進行錯誤檢驗的時候調用函數,不用再進行判斷了

代碼如下:

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

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

1.defer簡介

 defer后面定義的東西是在調用函數執行完的時候執行的代碼,一般用于文件描述符、數據庫對象的關閉(在之前講管道的時候有介紹過)

 defer什么什么延時執行

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
func pDefer() {
    defer fmt.Println("hahaha")
    fmt.Println("hello")
}
func main() {
    pDefer()
}
/*
打印結果
    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 來捕獲和處理異常(返回錯誤變量)
    //函數執行末尾執行這個匿名函數
     defer func() {
         err := recover() // recover()內置函數,可以捕獲到異常
         if err != nil {  //說明捕獲到錯誤
             fmt.Println(err)
         }
     }()
    num1 := 10
    num2 := 0
    res := num1 / num2
    fmt.Println("計算結果為=", res)
 
}
func main() {
    test()
}

3.使用panic主動拋出錯誤

異常的捕獲,使程序還能夠正常的運行,如果有致命錯誤就需要進行錯誤的拋出了,也就是宕機,不到迫不得已千萬不要使用這個函數,有可能會造成大量數據的丟失

代碼如下:

?
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("除數為零")
    }
    res := num1 / num2
    fmt.Println("計算結果為=", res)
    return nil
 
}
 
 
func main() {
    //無論err是否為空,都進行程序的終止
     panic(test())//內置函數2,參數使一個interface接口
}

運行結果:

Go語言錯誤處理異常捕獲+異常拋出

總結:

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

到此這篇關于Go語言錯誤處理異常捕獲+異常拋出的文章就介紹到這了,更多相關Go語言異常捕獲和異常拋出內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

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

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

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

    a165861639710342021-03-08
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

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

    4272021-11-24
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

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

    SmallQinYan12302021-02-02
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

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

    天易獨尊11682021-06-09
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

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

    golang json.Marshal 特殊html字符被轉義的解決方法

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

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

    golang如何使用struct的tag屬性的詳細介紹

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

    Go語言中文網11352020-05-21
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

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

    腳本之家3642020-04-25
主站蜘蛛池模板: 精品一区二区免费视频视频 | 亚洲综合91| 天天夜夜操操 | 国产99精品在线 | 91精品国产99久久久久久红楼 | 正在播放91视频 | 亚洲国产精品一区二区三区 | 欧美wwwcom| 亚洲精品a级 | 在线成人www免费观看视频 | 日本在线视频二区 | 久久久久成人免费 | 偷偷草网站 | 日本在线免费观看视频 | 韩国一级免费视频 | www.狠狠操.com | 在线播放亚洲视频 | 操操日日| 成人男男视频拍拍拍在线观看 | 亚洲人成电影在线 | 亚洲精品久久久久www | 国产成年人在线观看 | 一本色道久久综合狠狠躁篇适合什么人看 | 一区二区三区四区高清视频 | 毛片av网 | 好吊色欧美一区二区三区四区 | xx53xx| 99久久99久久| 国产精品久久久久久久四虎电影 | 久久影城| 国产一区二区视频观看 | 激情九九 | 99在线在线视频免费视频观看 | 91美女视频在线观看 | 国产一级二级在线播放 | 日本网站在线播放 | 羞羞答答视频 | 久久精品网 | 久久免费看毛片 | 午夜视频久久久 | 91高清国产视频 |