只在此山中,雲深不知處
Structures & Error Handling
- Structures類似於物件的設計,Error Handling類似於Exception Handling。
Structures
- 對於某一類別的物件設計一個Structures來描述該類別的特性,是一個包含多個資料項的變數型態
-
使用type與struct兩關鍵字來敘述structure。
- 使用.來取得struct內的元件。
- 如前所述,可以針對設計struct設計method(e.g. area() and isWithin())。
-
因為structure類似一種變數,所以可以當作function的argument。
-
structure當作function的argument時,一樣可以傳址。
- cir *Circle接收到記憶體位址,使用structure的參數時使用pointer.argument(e.g. cir.x)即可。
Interface
- Go也提供inteferface的設計,此種type為abstract
-
: 設計時將struct用關鍵字interface取代。
- 設計interface Shape,其中包含area()方法,並設計getArea(shape Shape)函數來傳回area()。
- 針對每一個shape都設計area()方法,最後可使用getArea(shape)來取得面積。
- 可以使用new來配置一個零初始化的物件(e.g. var rect = new(Rectangle)),之後再對變數賦值。
Error Handling
- Error Handling的意思是當潛在錯誤可能發生時,先行進行處理
-
: error是Go內建的interface,在設計函數時,同時回傳可能的error。
- 使用errors.New()來建構錯誤訊息。
- if err != nil表示error產生,否則err == nil。
-
使用defer, panic, 與recover。
- panic表示錯誤,產生panic即跳往defer並準備關閉程式,。
- 若沒有使用recover(),執行完defer函數後產生錯誤訊息跳出。使用recover()捕捉panic後,執行完defer函數後跳出。