Go語言函式


函式是一組執行任務的語句。 每個Go程式至少有一個函式,也就是main()函式,所有最小的程式可以定義附加的函式。

可以將程式碼分成單獨的函式。如何在不同的函式之間劃分程式碼取決於程式員,但在邏輯上,通常每個函式執行一個特定的任務。

函式宣告告訴編譯器有關函式的名稱,返回型別和引數。 函式定義提供了函式的實際主體。

Go標準庫提供了許多內建的函式,在編寫程式時可以呼叫。 例如,函式len()接受各種型別的引數,並返回型別的長度。 例如,如果一個字串傳遞給它,它將返回字串的位元組長度,如果一個陣列傳遞給它,它將返回陣列長度,也就是陣列中的元素數量。

函式有各種不同的叫法(名稱),如方法子例程過程等。

定義函式

Go程式設計語言中函式定義的一般形式如下:

func function_name( [parameter list] ) [return_types]
{
   body of the function
}

Go程式設計語言中的函式定義包括函式頭和函式體。這裡是一個函式的所有部分:

  1. func開始一個函式的宣告。
  2. 函式名稱(function_name):這是函式的名稱。函式名和引數列表一起構成函式簽名。
  3. 引數:引數類似於預留位置。 呼叫函式時,將一個值傳遞給引數。 此值稱為實際引數或引數。 引數列表指的是函式的引數的型別,順序和數量。 引數是可選的; 即,函式可以不用包含引數。
  4. 返回型別:函式可以有返回值列表。return_types是函式返回的值的資料型別的列表。某些函式執行所需的操作,而不用(無)返回值。在這種情況下,return_type就不是必需的。
  5. 函式體:函式體包含定義函式的功能的語句集合。

範例

以下是一個名為max()的函式的原始碼。此函式使用兩個引數num1num2,並返回這兩個引數的最大值:

/* function returning the max between two numbers */
func max(num1, num2 int) int
{
   /* local variable declaration */
   result int

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

呼叫函式

在建立Go函式時,需要給出函式的定義。要使用函式,必須呼叫該函式來執行定義的任務。
當程式呼叫一個函式時,程式控制轉移到被呼叫的函式。 被呼叫函式執行定義的任務,並且在返回語句執行時或者到達函式結束閉包括時,它返回程式控制回到主程式。

要呼叫函式,只需要傳遞所需的引數以及函式名稱,如果函式返回一個值,那麼可以儲存返回的值。 例如:

package main

import "fmt"

func main() {
   /* local variable definition */
   var a int = 100
   var b int = 200
   var ret int

   /* calling a function to get max value */
   ret = max(a, b) // 儲存返回的值到 ret 變數中

   fmt.Printf( "Max value is : %d\n", ret )
}

/* function returning the max between two numbers */
func max(num1, num2 int) int {
   /* local variable declaration */
   var result int

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

在這裡保持max()函式與main()函式一起編譯原始碼。當執行最終可執行檔案時,它將產生以下結果:

Max value is : 200

從函式返回多個值

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

package main

import "fmt"

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

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

當上述程式碼編譯和執行時,它產生以下結果:

Curry
Hippo

函式引數

如果函式要使用引數,它必須宣告接受引數值的變數。這些變數稱為函式的形式引數。
形式引數與函式內部的其他區域性變數一樣,在進入函式時建立,在退出時被銷毀。
在呼叫函式時,有兩種方法可以將引數傳遞給函式:

呼叫型別 描述
按值呼叫 此方法將引數的實際值複製到函式的形式引數中。 在這種情況下,對函式中的引數所做的更改不會影響引數的值,退出函式後引數的值還是原值。
按參照呼叫 此方法將引數的地址複製到形式引數中。在函式內部,地址用於存取在呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數的值,退出函式後引數的值是函式內部被修改後的值。

預設情況下,Go使用按值呼叫來傳遞引數。一般來說,函式中的程式碼不能改變用於呼叫函式的引數,所以呼叫max()函式使用的也是相同的方法。

函式用法

函式用法 描述
函式作為值使用 函式可以即時建立,並且可以用作值。
函式閉包 函式閉包是匿名函式,可以在動態規劃中使用。
方法 方法是使用接收器的特殊函式。