在go語言中,除基本資料型別(int,float,boolean,string)、複合型(struct,array)和引用型別(slice,map,指標,channel,function)外,還有一種內建的資料型別:error。
error是go語言的內建型別,因此就像int等型別一樣,不需要引用任何包,就可以定義error型別的變數。
var err error //定義乙個error型別的變數err
複製**
實際上,error型別是乙個介面型別,在go語言中的定義如下,
type error inte***ce
複製**
error的定義在builtin包,注意,這個包不需要使用import語句引入。
如果你學過go語言有關介面的知識便知道,任意的型別,只要在這種型別中有定義與介面相同的方法,便是實現了這個介面,因此go語言error型別的定義,為go程式設計提供了一套有關錯誤處理的機制。
有別於其他程式語言,在go語言中,並沒有try...catch這種異常處理機制,雖然panic()和recover()這兩個函式配合使用可以達到類似try...catch的異常捕捉效果,但還是有不同之處。
在go語言的標準庫,常常可見到函式中有返回error的函式定義,這便是go語言的錯誤處理機制,由開發人員顯性返回錯誤,再由上層呼叫者決定如何處理。
package os
func create(name string) (*file, error)
func open(name string) (*file, error)
複製**
Golang學習筆記 介面和錯誤
go介面定義了方法後,其它型別只要實現了這些方法就是實現了介面。go語言中介面型別的獨特之處在於它是滿足隱式實現的鴨子型別。所謂鴨子型別說的是 只要走起路來像鴨子,叫起來也像鴨子,那麼就可以把它當作鴨子。type person inte ce type student struct type wor...
GoLang學習筆記(三十六)介面物件的轉型
介面物件轉型 方式一 instance,ok 介面物件.實際型別 如果該介面物件是對應的實際型別,那麼instance就是轉型之後物件,ok的值為true 配合if.else if.使用 方式二 介面物件.type 配合switch.case語句使用 type shape inte ce type ...
Golang學習筆記
如果乙個method的receiver是 t,你可以在乙個t型別的例項變數v上面呼叫這個method,而不需要 v去呼叫這個method 即不需要 v method 如果乙個method的receiver是t,你可以在乙個 t型別的變數p上呼叫這個method,而不需要 p去呼叫這個method。i...