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("Mahesh", "Kumar")
   fmt.Println(a, b)
}

以上實例執行結果為:

Kumar Mahesh


函數參數

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

形參就像是定義在函數體內的局部變數。

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

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

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


函數用法

函數定義後可作為值來使用閉包是匿名函數,可在動態編程中使用
函數用法
##函數作為值
#閉包
###方法######方法就是一個包含了接受者的函數##############