Go - 函式



函式是一組共同執行一項任務的語句。每個 Go 程式至少有一個函式,即main()。您可以將程式碼分成單獨的函式。您如何將程式碼劃分到不同的函式取決於您自己,但從邏輯上講,劃分應該使每個函式執行特定任務。

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

Go 標準庫提供了許多內建函式,您的程式可以呼叫這些函式。例如,函式len()接受各種型別的引數並返回型別的長度。如果向其傳遞字串,則該函式返回字串的位元組長度。如果向其傳遞陣列,則該函式返回陣列的長度。

函式也稱為方法、子程式過程

定義函式

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

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

Go 程式語言中的函式定義由函式頭函式體組成。以下是函式的所有部分:

  • Func − 它開始宣告一個函式。

  • 函式名 − 它是函式的實際名稱。函式名和引數列表共同構成函式簽名。

  • 引數 − 引數就像一個佔位符。呼叫函式時,您將值傳遞給引數。此值被稱為實際引數或引數。引數列表指的是函式引數的型別、順序和數量。引數是可選的;也就是說,函式可能不包含任何引數。

  • 返回型別 − 函式可能返回多個值。return_types 是函式返回值的資料型別的列表。有些函式執行所需的操作而不返回值。在這種情況下,不需要return_type。

  • 函式體 − 它包含定義函式作用的一組語句。

示例

以下原始碼顯示了一個名為max()的函式。此函式接受兩個引數 num1 和 num2,並返回兩者之間的最大值:

/* 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 函式時,您將定義函式必須執行的操作。要使用函式,您必須呼叫該函式以執行定義的任務。

當程式呼叫函式時,程式控制權將轉移到被呼叫的函式。被呼叫的函式執行定義的任務,當執行其 return 語句或到達其函式結束的閉合大括號時,它將程式控制權返回給主程式。

要呼叫函式,您只需在其函式名旁邊傳遞所需的引數即可。如果函式返回值,則可以儲存返回值。例如:

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)

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

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

Kumar Mahesh

函式引數

如果函式要使用引數,則必須宣告接受引數值的變數。這些變數稱為函式的形式引數

形式引數在函式內部的行為類似於其他區域性變數,並在進入函式時建立,並在退出時銷燬。

呼叫函式時,引數可以透過兩種方式傳遞給函式:

序號 呼叫型別和描述
1 按值呼叫

此方法將引數的實際值複製到函式的形式引數中。在這種情況下,對函式內部引數所做的更改不會影響引數。

2 按引用呼叫

此方法將引數的地址複製到形式引數中。在函式內部,該地址用於訪問呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數。

預設情況下,Go 使用按值呼叫來傳遞引數。一般來說,這意味著函式內的程式碼無法更改用於呼叫函式的引數。上面的程式在呼叫 max() 函式時使用了相同的方法。

函式用法

函式可以用以下方式使用

序號 函式用法和描述
1 函式作為值

可以動態建立函式並將其用作值。

2 函式閉包

函式閉包是匿名函式,可用於動態程式設計。

3 方法

方法是具有接收器的特殊函式。

廣告