Go語言函數
函數是一組一起執行任務的語句。每Go程序具有至少一個函數,它一般是main(),以及所有的最瑣碎程序可以定義附加函數。
你可以將代碼放到獨立的功能。如何劃分代碼之間的不同功能,但邏輯上的劃分通常是讓每個函數執行特定的任務。
函數聲明告訴編譯器有關的函數的名稱,返回類型和參數。一個函數定義提供了函數的實際主體。
Go語言標準庫提供了大量的內置函數,在程序可以調用。例如,函數len()需要不同類型的參數和返回值的類型的長度。例如,如果一個字符串傳遞給它,它會返回字符串的長度以字節為單位,如果一個數組傳遞給它,它就會返回數組的長度為它所擁有元素的個數。
函數稱為具有各種名字等的方法或子例程或程序等。
定義一個函數:
在Go編程語言的函數定義的一般形式如下:
func function_name( [parameter list] ) [return_types] { body of the function }
在Go編程語言中的函數定義由函數頭和函數體。這裡是一個函數的所有部分:
-
func 開始函數的聲明。
-
Function Name: 這是該函數的實際名稱。函數名和參數列表一起構成了函數簽名。
-
Parameters: 參數是像一個占位符。當調用一個函數,你傳遞一個值的參數。這個值被稱為實際參數或參數。參數列表指的類型,順序和數量的函數的參數。參數是可選的;也就是說,一個函數可包含任何參數。
-
Return Type: 函數可能返回值的列表。return_types是該函數返回值的數據類型的列表。有些函數執行所需的操作冇有返回值。在這種情況下,return_type不是必需的。
-
Function Body: 函數體包含了定義函數操作語句的集合。
例子:
下麵是一個函數的源代碼稱為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
函數參數:
如果一個函數使用參數,它必須聲明接受的參數值的變量。這些變量被調用的函數的形式參數。
正式的參數表現得就像在函數內部其他本地變量並且在進入函數創建和退出時銷毀。
當調用一個函數,有一些參數可以傳遞給函數,有兩種方法:
調用類型 | 描述 |
---|---|
按值調用 | 這種方法複製一個參數的實際值到函數的形式參數。在這種情況下,參數在函數內變化對參數冇有影響 |
參考調用 | 這種方法複製一個參數的地址複製到形式參數。在函數裡邊,地址是用來訪問調用中使用的實際參數。這意味著,對參數的更改會影響參數 |
默認情況下,Go使用按值調用傳遞參數。在一般情況下,這意味著一個函數中的代碼不能改變用來調用該函數的參數和上麵提到的例子,而調用max()函數中使用同樣的方法。
函數用途:
函數用途 | 描述 |
---|---|
函數作為值 | 函數可以運行創建並且可以被用作值 |
閉包函數 | 函數閉合是匿名的函數,可以在動態編程中使用 |
方法 | 方法是用一個接收器的特殊功能 |