婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談Go語言的error類型

淺談Go語言的error類型

熱門標簽:湛江crm外呼系統排名 鄭州智能語音電銷機器人價格 不封卡外呼系統 重慶慶云企業400電話到哪申請 仙桃400電話辦理 宿遷便宜外呼系統代理商 上海極信防封電銷卡價格 寧波語音外呼系統公司 地圖標注免費定制店

error類型是go語言的一種內置類型,使用的時候不用特定去import,他本質上是一個接口

 type error interface{
 Error() string //Error()是每一個訂制的error對象需要填充的錯誤消息,可以理解成是一個字段Error
}

怎樣去理解這個訂制呢?

我們知道接口這個東西,必須擁有它的實現塊才能調用,放在這里就是說,Error()必須得到填充,才能使用.

比方說下面三種方式:

第一種:通過errors包去訂制error

error := errors.New("hello,error")//使用errors必須import "errors"包
if error != nil {
 fmt.Print(err)
}

來解釋一下errors包,只是一個為Error()填充的簡易封裝,整個包的內容,只有一個New方法,可以直接看

func New(text string) error

第二種:通過fmt.Errorf()去訂制

err := fmt.Errorf("hello error")
if err != nil {
 fmt.Print(err)
}

可以說和第一種雷同了.

第三種:就是通過自定義的MyError塊去訂制了

//一個包裹了錯誤類型對象的自定義錯誤類型
type MyError struct {
err error 
}
//訂制Error()
func (e MyError) Error() string {
 return e.err.Error()
}
func main() {
 err:=MyError{
 errors.New("hello error"),
 }
 fmt.Println(err.Error())
}

三種方式差異都不大,輸出結果都是 hello error

實際上error只是一段錯誤信息,真正拋出異常并不是單純靠error,panic和recover的用法以后總結。

補充:go error接口與errors包詳解

1 error接口

定義:

 type error interface{
 Error() string //Error()是一個方法,是每一個訂制的error對象需要填充的錯誤消息,可以理解成是一個字段Error
}

1.1 常見調用方式

模板

n, err := Foo(0) 
 
if err != nil { 
 // 錯誤處理 
} else { 
 // 使用返回值 n 
} 

練習1

package main
import ( 
 "fmt"
 "os"
)
func main() { 
 f, err := os.Open("/test.txt")
 if err != nil {
  fmt.Println(err)
  return
 }
 fmt.Println(f.Name(), "opened successfully")
}

[root@localhost error]# go run err3.go

open /test.txt: no such file or directory

1.2 自定義error方法

1.2.1 函數調用error

func Foo(param int)(n int, err error) { 
 // ... 
} 

1.2.2 自定義Error模板1

type fileError struct {
}
func (fe *fileError) Error() string {
 return "文件錯誤"
}

練習1

模擬一個錯誤

package main
import "fmt"
type fileError struct {
}
func (fe *fileError) Error() string { //自定義會覆蓋原來的Error接口
 return "文件錯誤"
}
//只是模擬一個錯誤
func openFile() ([]byte, error) {
 return nil, fileError{}
}
func main() {
 conent, err := openFile()
 if err != nil {
  fmt.Println(err)
 } else {
  fmt.Println(string(conent))
 }
}

[root@localhost error]# go run err1.go

文件錯誤

1.2 自定義Error模板2

自定義中添加一個字符串

type fileError struct {
 s string
}
func (fe *fileError) Error() string {
 return fe.s
}

練習2

聲明fileError的時候,設置好要提示的錯誤文字

package main
import "fmt"
type fileError struct {
 s string
}
func (fe *fileError) Error() string {
 return fe.s
}
//只是模擬一個錯誤
func openFile() ([]byte, error) {
 return nil, fileError{"文件錯誤,自定義"} 
}
func main() {
 conent, err := openFile()
 if err != nil {
  fmt.Println(err)
 } else {
  fmt.Println(string(conent))
 }
}

[root@localhost error]# go run err2.go

文件錯誤,自定義

練習3

添加一個時間刻度

package main
import (
 "fmt"
 "time"
)
type MyError struct {
 When time.Time
 What string
}
func (e MyError) Error() string {
 return fmt.Sprintf("%v: %v", e.When, e.What)
}
func oops() error {
 return MyError{
  time.Date(1989, 3, 15, 22, 30, 0, 0, time.UTC),
  "the file system has gone away",
 }
}
func main() { 
 if err := oops(); err != nil { 
  fmt.Println(err) 
 }
}

[root@localhost error]# go run err4.go

1989-03-15 22:30:00 +0000 UTC: the file system has gone away

練習三

沒有打開文件報錯

package main
import (
 "fmt"
 "os"
)
type PathError struct {
 Op string
 Path string
 Err error
}
func (e *PathError) Error() string { 
  return e.Op + " " + e.Path + ": " + e.Err.Error() 
} 
func main() {
 f, err := os.Open("/test.txt")
 if errObject, ok := err.(*os.PathError); ok {
 fmt.Println("錯誤輸出:",err, "文件路徑:", errObject.Path)
 return
 }
 fmt.Println(f.Name(), "opened successfully")
} 

[root@localhost error]# go run err5.go

錯誤輸出: open /test.txt: no such file or directory 文件路徑: /test.txt

2 errors包

2.1 獲取error包

go get github.com/pkg/errors

2.2 errors.New()

errors.New()接收合適的錯誤信息來創建

先聲明再使用

l練習1

package main
import (
 "errors"
 "fmt"
)
var errNotFound error = errors.New("Not found error")
func main() {
 fmt.Printf("error: %v", errNotFound)
}

[root@localhost error]# go run errs1.go

error: Not found error

練習2

函數如何調用err

直接使用

package main
import (
 "errors"
 "fmt"
)
func Sqrt(f float64) (float64, error) {
  if f  0 {
   return 0, errors.New("math - square root of negative number")
  }else {
   return 1, errors.New("math - square root of 10")
  }
}
func main() {
 if _, err := Sqrt(-1); err != nil {
  fmt.Printf("Error: %s\n", err)
 }
}

[root@localhost error]# go run errs2.go

Error: math - square root of negative number

3 自定義error與errors.New()使用比較

比較自定義error與errors.New()函數根據需求其實各有優點。

package main
import (
 "errors"
 "fmt"
)
type MsgError struct {
 Code int
 Msg string
}
func (msg *MsgError) Error() string {
 return fmt.Sprintf("%s", msg.Msg)
}
func f1(code int) (int, error) {
 if code == 1 {
 return -1, errors.New("msg test error")
 }
 return code, nil
}
func f2(code int) (int, error) {
 if code == 1 {
 return -1, MsgError{code, "struct msg test error"}
 }
 return code, nil
}
func main() {
 for _, v := range []int{1, 2, 3, 4, 5, 6} {
  if code, err := f1(v); err != nil {
 fmt.Println(err)
 } else {
 fmt.Println("success:", code)
 }
 }
 for _, i := range []int{1, 2, 3} {
 if code, err := f2(i); err != nil {
 fmt.Println(err)
 } else {
 fmt.Println("success:", code)
 }
 }
}
[root@localhost error]# go run errs3.go
msg test error
success: 2
success: 3
success: 4
success: 5
success: 6
struct msg test error
success: 2
success: 3

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • GO語言標準錯誤處理機制error用法實例
  • Go 自定義error錯誤的處理方法
  • golang 打印error的堆棧信息操作
  • 淺析golang開發Error的使用詳解
  • Go應用中優雅處理Error的技巧總結

標簽:西雙版納 電子產品 遼寧 儋州 海南 物業服務 安康 青海

巨人網絡通訊聲明:本文標題《淺談Go語言的error類型》,本文關鍵詞  淺談,語言,的,error,類型,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談Go語言的error類型》相關的同類信息!
  • 本頁收集關于淺談Go語言的error類型的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧洲成人精品av97| 成人免费小视频| 久久综合资源网| 日本欧美一区二区三区| 欧美日韩综合在线免费观看| 亚洲免费观看在线观看| 日本乱人伦aⅴ精品| 亚洲高清三级视频| 欧美精品电影在线播放| 五月激情六月综合| 欧美成人一区二区三区在线观看| 国产一区在线不卡| 综合色天天鬼久久鬼色| 在线一区二区视频| 亚洲欧美日韩人成在线播放| 91在线丨porny丨国产| 一区二区三区不卡视频| 日韩三区在线观看| 国产a久久麻豆| 亚洲成人动漫在线观看| 欧美日韩美女一区二区| 国产一区二区91| 亚洲综合免费观看高清在线观看| 欧美肥妇bbw| 国产精品系列在线播放| 亚洲精品国产精品乱码不99| 在线不卡欧美精品一区二区三区| 老司机免费视频一区二区三区| 国产亚洲短视频| 欧美亚洲综合另类| 国产伦精品一区二区三区免费迷| 一区在线中文字幕| 欧美一卡2卡三卡4卡5免费| 91香蕉国产在线观看软件| 日本在线播放一区二区三区| 久久免费看少妇高潮| 欧美性一级生活| 国产一区二区伦理片| 18涩涩午夜精品.www| 欧美一级日韩不卡播放免费| 成人午夜私人影院| 亚洲一区二区三区四区在线观看| 久久综合色一综合色88| 欧美精品一二三| 一本色道综合亚洲| 不卡的av网站| 国产不卡一区视频| 国产一区二区久久| 国产曰批免费观看久久久| 亚洲成人黄色小说| 亚洲国产日日夜夜| 亚洲制服丝袜在线| 亚洲激情欧美激情| 中文字幕一区av| 亚洲国产成人自拍| 久久久91精品国产一区二区三区| 欧美一二三区精品| 69久久夜色精品国产69蝌蚪网| 在线欧美日韩国产| 欧美视频一区在线| 欧美亚洲日本国产| 欧美午夜不卡视频| 欧美日韩精品三区| 欧美日韩一区中文字幕| 欧美三级日韩三级| 欧美日韩国产bt| 欧美另类久久久品| 日韩视频中午一区| 久久久一区二区| 中文字幕精品一区二区精品绿巨人| 51午夜精品国产| 欧美日韩免费高清一区色橹橹| 欧美亚洲精品一区| 555夜色666亚洲国产免| 日韩欧美综合在线| 久久久天堂av| 国产精品久久久久久久久晋中| 成人欧美一区二区三区小说| 亚洲天天做日日做天天谢日日欢| 亚洲品质自拍视频| 日韩精品一卡二卡三卡四卡无卡| 日韩精品久久理论片| 狠狠v欧美v日韩v亚洲ⅴ| 成人三级伦理片| 91啪亚洲精品| 欧美一区二区三区四区五区| 欧美精品一区在线观看| 久久精品男人的天堂| 亚洲欧美日韩精品久久久久| 亚洲一区二区三区四区的| 日本va欧美va欧美va精品| 日本91福利区| 成人免费视频caoporn| 欧美色综合网站| 久久久久99精品一区| 日韩伦理电影网| 麻豆91在线看| 91网站视频在线观看| 日韩一级二级三级| 中文字幕在线免费不卡| 日韩av中文在线观看| 成人黄色片在线观看| 91精品国产综合久久国产大片| 精品对白一区国产伦| 亚洲精品国产高清久久伦理二区| 黄页视频在线91| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 制服.丝袜.亚洲.另类.中文 | 久久精品国产成人一区二区三区 | 91色porny在线视频| 欧美日韩一区三区四区| 中文字幕欧美日本乱码一线二线| 亚洲v精品v日韩v欧美v专区| 成人免费不卡视频| 精品国产凹凸成av人网站| 亚洲狠狠爱一区二区三区| 成人精品小蝌蚪| 26uuu精品一区二区| 免费成人在线视频观看| 91小视频免费看| 中文字幕成人在线观看| 久久国产尿小便嘘嘘尿| 欧美在线观看18| 亚洲视频综合在线| 成人爽a毛片一区二区免费| 日韩一级二级三级| 日韩黄色一级片| 欧美精品在线观看一区二区| 一区二区三区 在线观看视频| a级高清视频欧美日韩| 国产欧美视频一区二区三区| 国产成人一区二区精品非洲| 日韩精品一区二区三区四区| 日韩成人伦理电影在线观看| 欧美日韩精品一区二区三区四区 | 日韩一区二区电影网| 亚洲国产视频在线| 欧美日韩精品电影| 亚洲www啪成人一区二区麻豆| 在线观看亚洲成人| 亚洲综合色婷婷| 欧美三级资源在线| 日本亚洲一区二区| 精品国产免费一区二区三区四区| 久久精品国产精品亚洲综合| 日韩美女视频在线| 国产综合色视频| 久久精品亚洲国产奇米99 | 日本不卡视频在线观看| 欧美日韩精品欧美日韩精品一综合| 亚洲成av人片www| 欧美一区二区国产| 国产suv精品一区二区883| 国产日韩视频一区二区三区| 不卡电影免费在线播放一区| 亚洲夂夂婷婷色拍ww47 | 亚洲欧美影音先锋| 欧美性一级生活| 久久爱www久久做| 中文字幕永久在线不卡| 欧美日产国产精品| 九色综合国产一区二区三区| 久久精品一区二区三区av| 91精品办公室少妇高潮对白| 午夜精品爽啪视频| 久久久久久久综合色一本| 成人激情黄色小说| 日韩成人av影视| 国产精品免费视频观看| 欧美在线短视频| 国产毛片精品视频| 亚洲国产欧美在线| 26uuu久久综合| 欧美午夜寂寞影院| 成人av在线电影| 蜜桃av一区二区在线观看| 国产精品国产三级国产三级人妇 | 337p粉嫩大胆噜噜噜噜噜91av| 成人精品在线视频观看| 视频在线观看一区二区三区| 欧美大片在线观看一区| 成人黄色在线视频| 日本午夜一本久久久综合| 国产精品短视频| 久久色中文字幕| 欧美日韩国产首页在线观看| 国产精品一区2区| 男女男精品视频网| 亚洲精品日韩一| 国产欧美日韩在线看| 欧美精品在线观看播放| 色婷婷综合五月| 成人av第一页| 国产福利91精品一区二区三区| 天天综合日日夜夜精品| 亚洲欧美一区二区不卡| 亚洲国产经典视频| 久久夜色精品国产噜噜av| 日韩欧美在线综合网| 9191久久久久久久久久久|