1. 程式人生 > 其它 >go語言readline()返回值_Go語言極簡教程 - 第六篇 函式

go語言readline()返回值_Go語言極簡教程 - 第六篇 函式

技術標籤:go語言readline()返回值

1601bdc97406c92d86cbdaa106e590bd.png

Go語言既不像Java和C#那樣是面向物件的程式語言,也不像Lisp和Haskell那樣是純函式式的程式語言。在Go語言中,函式是“一等公民”。

函式宣告

func 函式名(引數列表) (返回值列表){函式體}

函式的定義以func關鍵字開頭,函式名與func關鍵字以空格分隔,函式名規範需符合Go語言中的識別符號規範。函式可以有零個或多個引數,也可以有零個或多個返回值。

示例

func add(a int,b int) int { return a + b  }

函式特點

多值返回

函式允許返回多個值,多個返回值時需要將返回型別列表用()括起來。

013b36a907dbc22e8e570a77a3271bd0.png

不定引數

函式支援不定數目的形式引數,不定引數宣告使用...type格式。在函式體內部,不定引數是一個slice型別,所有對slice型別的操作同樣也適用於不定引數。

func printList(arr ...int){ for _, value := range arr { fmt.Println(value) }}

Go函式對不定引數有一定的約束:

  • 函式只能有一個不定引數。
  • 不定引數必須是函式形參列表的最後一個。
0ad610acaee1a4a1d972df379b0866be.png
  • 不定引數作為另一個含有不定引數的函式的實引數傳遞時需要通過“...”來解參傳遞
0be43fdaae2f6bce66d17ebbc5059a8b.png

不支援引數預設值

Go語言為了追求顯式的表達,避免隱含,因此不支援引數預設值。

不支援函式過載

其它語言中,例如Java、C#都支援方法過載,即同一個類中有多個同名方法,但引數型別或引數數量不同。Go語言不支援同一個作用域範圍內多個函式名稱相同的情況,因此也不支援 函式過載。

e67cb67b9eed015650800e42e4fe7819.png

匿名函式

上述的函式都是具名函式,與具名函式相對應的叫匿名函式。Go語言同樣支援匿名函式,匿名函式沒有函式名稱,可以在其它函式體內定義。

匿名函式用得最頻繁的應該是在defer延遲執行語句,示例如下:

func Inc() (value int){ defer func(){value++} return 9}

匿名函式還可以做為函式的返回值,示例如下:

package mainimport "fmt"func main () { // 呼叫高階函式add,完成3+2的計算 sum:=add(3)(2)  fmt.Printf("3+2=%d