本文小編為大家詳細(xì)介紹“Golang中怎么優(yōu)雅地處理錯(cuò)誤”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Golang中怎么優(yōu)雅地處理錯(cuò)誤”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站制作、潘集網(wǎng)絡(luò)推廣、小程序定制開發(fā)、潘集網(wǎng)絡(luò)營(yíng)銷、潘集企業(yè)策劃、潘集品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供潘集建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
一、錯(cuò)誤分類
在 Golang 中,錯(cuò)誤被放置在 error 類型中。Error 類型被定義為僅包含一個(gè) Error 方法,它返回一個(gè)字符串。當(dāng)出現(xiàn)錯(cuò)誤時(shí),通常創(chuàng)建一個(gè)新的 Error 類型。在 Golang 中,可以使用內(nèi)置的錯(cuò)誤包或者自定義錯(cuò)誤來表示錯(cuò)誤信息。
通常來說,Golang 中的錯(cuò)誤可以分為以下三類:
1、預(yù)定義錯(cuò)誤
預(yù)定義錯(cuò)誤是內(nèi)置錯(cuò)誤類型,通常用于表示 Golang 中的系統(tǒng)級(jí)別錯(cuò)誤。例如,在文件讀取過程中遇到了 EOF 等錯(cuò)誤。對(duì)于這類錯(cuò)誤,大多數(shù)可以使用內(nèi)置的錯(cuò)誤函數(shù)進(jìn)行處理。
2、自定義錯(cuò)誤
自定義錯(cuò)誤是程序員在編寫代碼時(shí)自己設(shè)計(jì)的,能夠生成特定類型的錯(cuò)誤。例如,JSON 解析失敗等錯(cuò)誤。對(duì)于這類錯(cuò)誤,程序員必須自己定義錯(cuò)誤類型,并在函數(shù)調(diào)用時(shí)返回它。
3、運(yùn)行時(shí)錯(cuò)誤
運(yùn)行時(shí)錯(cuò)誤是 Golang 解釋器在運(yùn)行程序時(shí)遇到的錯(cuò)誤。例如,0 除錯(cuò)誤等,這類錯(cuò)誤通常是由系統(tǒng)級(jí)別的錯(cuò)誤所引起的,不能被預(yù)測(cè),因此程序員需要注意處理此類錯(cuò)誤。
二、Go 的錯(cuò)誤處理方法
在 Golang 中,通常使用以下兩種方式來處理錯(cuò)誤:
1、返回值處理
在 Golang 中,通常使用返回值中的錯(cuò)誤信息來處理錯(cuò)誤。在函數(shù)調(diào)用前,通常會(huì)檢查其他函數(shù)調(diào)用的返回值是否為錯(cuò)誤類型。如果是,則終止當(dāng)前函數(shù)調(diào)用,并將錯(cuò)誤返回給調(diào)用者。
舉個(gè)例子,以下代碼對(duì)于讀取 greeting.txt 文件的錯(cuò)誤進(jìn)行了處理,其中函數(shù) readGreeting 返回錯(cuò)誤 err,如果出現(xiàn)錯(cuò)誤,該函數(shù)將返回 nil 值和 err 錯(cuò)誤類型。
func greet() error {
contents, err := readGreeting("greeting.txt")
if err != nil {
return err
}
fmt.Printf("Greetings: %s\n", contents)
return nil
}
func readGreeting(filename string) (string, error) {
file, err := os.Open(filename)
if err != nil {
return "", err
}
defer file.Close()
reader := bufio.NewReader(file)
greeting, err := reader.ReadString('\n')
if err != nil {
return "", err
}
return greeting, nil
}
2、panic 和 recover
另一種處理 Golang 中錯(cuò)誤的方式是使用 panic 和 recover。當(dāng)出現(xiàn)錯(cuò)誤并且未捕獲時(shí),會(huì)導(dǎo)致程序崩潰。但是,如果程序員在某個(gè)函數(shù)中使用 panic,則表示發(fā)生了錯(cuò)誤。這個(gè) panic 的信息將向外傳遞,直到被 recover 捕獲。
例如,以下代碼示例實(shí)現(xiàn)了數(shù)據(jù)庫(kù)連接和訪問的簡(jiǎn)單示例,如何處理失敗的情況。
func main() {
conn := openConnection("localhost", "mydb")
defer closeConnection(conn)
if err := insertData(conn, "test"); err != nil {
log.Fatal(err)
}
}
func openConnection(ip, dbname string) *DB {
conn, err := openDB(ip, dbname)
if err != nil {
panic(err)
}
return conn
}
func insertData(db *DB, data string) error {
if db == nil {
panic("No database connection!")
}
_, err := db.Exec("INSERT INTO data VALUES (?)", data)
return err
}
func closeConnection(db *DB) {
if db == nil {
panic("No database connection!")
}
db.Close()
}
func recoverFunction() {
if r := recover(); r != nil {
fmt.Println("Recovered", r)
}
}
三、一些建議
在 Golang 中,錯(cuò)誤的處理需要程序員自己去完成。但是,一些經(jīng)驗(yàn)和建議可以幫助程序員更好地完成錯(cuò)誤的處理:
1、對(duì)于系統(tǒng)級(jí)別的錯(cuò)誤,可以考慮使用內(nèi)置的錯(cuò)誤類型或 errors 包,容易理解和使用。
2、對(duì)于自定義錯(cuò)誤,可以在程序中自己定義錯(cuò)誤類型,并用攜帶必要參數(shù)的函數(shù)返回這些錯(cuò)誤。
3、使用 defer 關(guān)鍵字可以確保在編寫代碼時(shí)忘記清理資源時(shí),仍然可以正確清理資源,這是一種非常方便的方式。
4、在程序中使用 panic 和 recover 要慎重,盡量避免在程序中使用它們。
讀到這里,這篇“Golang中怎么優(yōu)雅地處理錯(cuò)誤”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。