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()函數使用的也是相同的方法。

函數用法

函數用法

描述

函數作爲值使用

函數可以即時創建,並且可以用作值。

函數閉包

函數閉包是匿名函數,可以在動態規劃中使用。

方法

方法是使用接收器的特殊函數。