GO語言標(biāo)準(zhǔn)錯誤處理機(jī)制error用法實(shí)例
本文實(shí)例講述了GO語言標(biāo)準(zhǔn)錯誤處理機(jī)制error用法。分享給大家供大家參考。具體分析如下:
在 Golang 中,錯誤處理機(jī)制一般是函數(shù)返回時使用的,是對外的接口,而異常處理機(jī)制 panic-recover 一般用在函數(shù)內(nèi)部。
error 類型介紹
error 類型實(shí)際上是抽象了 Error() 方法的 error 接口,Golang 使用該接口進(jìn)行標(biāo)準(zhǔn)的錯誤處理。
Error() string
}
一般情況下,如果函數(shù)需要返回錯誤,就將 error 作為多個返回值中的最后一個(但這并非是強(qiáng)制要求)。參考模型:
// ...
}
if n, err := Foo(0); err != nil {
// 錯誤處理
}
這就是 error 的使用方法,與其他語言的異常相比,Golang 的方法相對更加容易、直觀。
代碼1:經(jīng)典使用方法
import (
"errors"
"fmt"
)
func requireDual(n int) (int, error) {
if n&1 == 1 {
return -1, errors.New("您輸入不是雙數(shù)") //生成一個簡單的 error 類型
}
return n, nil
}
func main() {
if result, err := requireDual(101); err != nil {
fmt.Println("錯誤:", err)
} else {
fmt.Println("結(jié)果:", result)
}
}
輸出結(jié)果:
錯誤: 您輸入不是雙數(shù)
你有沒有覺得 Golang 的這種錯誤的處理機(jī)制非常的簡潔啊,呵呵!
代碼2:擴(kuò)充下上面的代碼,帶自定義參數(shù)的錯誤輸出
import (
"fmt"
)
type dualError struct {
Num int
problem string
}
func (e dualError) Error() string {
return fmt.Sprintf("參數(shù)不正確,因?yàn)閈"%d\"不是雙數(shù)", e.Num)
}
func requireDual(n int) (int, error) {
if n&1 == 1 {
return -1, dualError{Num: n}
}
return n, nil
}
func main() {
if result, err := requireDual(101); err != nil {
fmt.Println("錯誤:", err)
} else {
fmt.Println("結(jié)果:", result)
}
}
輸出結(jié)果
錯誤: 參數(shù)不正確,因?yàn)?101"不是雙數(shù)
希望本文所述對大家的GO語言程序設(shè)計有所幫助。
相關(guān)文章
Golang控制通道實(shí)現(xiàn)協(xié)程等待詳解
這篇文章主要介紹了Golang控制通道實(shí)現(xiàn)協(xié)程等待,通道是Go語言程序的并發(fā)體goroutine是它們之間的通信機(jī)制。一個通道是一個通信機(jī)制,它可以讓一個goroutine通過它給另一個goroutine發(fā)送值信息。每個通道都有一個特殊的類型,也就是channels可發(fā)送數(shù)據(jù)的類型2022-11-11
Golang在Window環(huán)境使用Imagick7的過程
這篇文章主要介紹了Golang在Window環(huán)境使用Imagick7的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
Golang?實(shí)現(xiàn)Redis?協(xié)議解析器的解決方案
這篇文章主要介紹了Golang???實(shí)現(xiàn)?Redis?協(xié)議解析器,本文將分別介紹Redis 通信協(xié)議 以及 協(xié)議解析器 的實(shí)現(xiàn),若您對協(xié)議有所了解可以直接閱讀協(xié)議解析器部分,需要的朋友可以參考下2022-10-10
淺析Golang如何向已關(guān)閉的chan讀寫數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Golang如何向已關(guān)閉的chan讀寫數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
Go語言實(shí)現(xiàn)AES加密并編寫一個命令行應(yīng)用程序
密碼學(xué)中的高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是經(jīng)常采用的一種區(qū)塊加密標(biāo)準(zhǔn)。本文就來用Go語言實(shí)現(xiàn)AES加密算法,需要的可以參考一下2023-02-02
Golang中優(yōu)秀的消息隊列NSQ基礎(chǔ)安裝及使用詳解
這篇文章主要介紹了Golang中優(yōu)秀的消息隊列NSQ基礎(chǔ)安裝及使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12

