Go 語言函式

Go 語言函式

函式是基本的程式碼塊,用於執行一個任務。

Go 語言最少有個 main() 函式。

你可以通過函式來劃分不同功能,邏輯上每個函式執行的是指定的任務。

函式宣告告訴了編譯器函式的名稱,返回型別,和引數。

Go 語言標準庫提供了多種可動用的內建的函式。例如,len() 函式可以接受不同型別引數並返回該型別的長度。如果我們傳入的是字串則返回字串的長度,如果傳入的是陣列,則返回陣列中包含的元素個數。


函式定義

Go 語言函式定義格式如下:

func function_name( [parameter list] ) [return_types] {
   函式體
}

函式定義解析:

  • func:函式由 func 開始宣告
  • function_name:函式名稱,函式名和引數列表一起構成了函式簽名。
  • parameter list:引數列表,引數就像一個佔位符,當函式被呼叫時,你可以將值傳遞給引數,這個值被稱為實際引數。引數列表指定的是引數型別、順序、及引數個數。引數是可選的,也就是說函式也可以不包含引數。
  • return_types:返回型別,函式返回一列值。return_types 是該列值的資料型別。有些功能不需要返回值,這種情況下 return_types 不是必須的。
  • 函式體:函式定義的程式碼集合。

例項

以下例項為 max() 函式的程式碼,該函式傳入兩個整型引數 num1 和 num2,並返回這兩個引數的最大值:

例項

/* 函式返回兩個數的最大值 */
func max(num1, num2 int) int {
   /* 宣告區域性變數 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

函式呼叫

當建立函式時,你定義了函式需要做什麼,通過呼叫該函式來執行指定任務。

呼叫函式,向函式傳遞引數,並返回值,例如:

例項

package main

import "fmt"

func main() {
   /* 定義區域性變數 */
   var a int = 100
   var b int = 200
   var ret int

   /* 呼叫函式並返回最大值 */
   ret = max(a, b)

   fmt.Printf( "最大值是 : %d\n", ret )
}

/* 函式返回兩個數的最大值 */
func max(num1, num2 int) int {
   /* 定義區域性變數 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

以上例項在 main() 函式中呼叫 max()函式,執行結果為:

最大值是 : 200

函式返回多個值

Go 函式可以返回多個值,例如:

例項

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Google", "itread01")
   fmt.Println(a, b)
}

以上例項執行結果為:

itread01 Google

函式引數

函式如果使用引數,該變數可稱為函式的形參。

形參就像定義在函式體內的區域性變數。

呼叫函式,可以通過兩種方式來傳遞引數:

傳遞型別 描述
值傳遞 值傳遞是指在呼叫函式時將實際引數複製一份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。
引用傳遞 引用傳遞是指在呼叫函式時將實際引數的地址傳遞到函式中,那麼在函式中對引數所進行的修改,將影響到實際引數。

預設情況下,Go 語言使用的是值傳遞,即在呼叫過程中不會影響到實際引數。


函式用法

函式用法 描述
函式作為另外一個函式的實參 函式定義後可作為另外一個函式的實引數傳入
閉包 閉包是匿名函式,可在動態程式設計中使用
方法 方法就是一個包含了接受者的函式