Function declarations
在我們 Hello World 的練習裡,曾提到一點點函式的定義,今天要來詳解它。
定義函式
函式的定義語法如下:
func <funcName>([param1 type1[, param2 type2 ...]]) ([return1 type1[, return2 type2 ...]]) { |
funcName
為 function 名稱,首字大寫為 public 是外部套件可以共用的,小寫為 private 只有套件內部可以看得到。param
為傳入值。return
為回傳值。Go 比較特別的是,它可以定義多個回傳值,而且還能定義它的名稱。定義名稱時,回傳的用法會有點特別。
先來個簡單的範例:
package main |
其中 add
函式,a
與 b
為相同型態,所以可以寫在一起,如下:
func add(a, b int) int { |
如果回傳值只有一個,而且沒有宣告名稱時,可以不用加括號 ()
。下面是回傳兩個值的範例
package main |
這有點類似 Map 取值的用法,第二個值是確認這個回傳是正確的。
如果有定義名稱的話,return
會把當下兩個變數的內容回傳出去。
package main |
常看過很多程式在一開始就定義 result
,在 return
的時候回傳出去。Go 則是在規格上直接實作出來,覺得蠻有趣的。
傳回多個值的時候,必須照順序接值;如果不需要回傳值,可以用 _
略過:
package main |
傳回多值通常會用在錯誤處理,如果使用不恰當的話,容易違反單一職責原則。
如果傳入值是不定的,可以用 ...
來表示,如:
package main |
裡面的 numbers
型態會是 Slice []int
,所以可以用 for range
走訪。
參考資料
- 函式入門 - 良葛格學習筆記
- Function declarations - The Go Programming Language Specification
- [SOLID 之 單一職責原則(Single responsibility principle)][Refactoring Day 7] - 看到 code 寫成這樣我也是醉了,不如試試重構?