這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
http://www.jb51.net/article/56831.htm
Go語言中的函數有系統函數和自訂函數。
1、系統函數
系統函數就是Go語言內建的函數,系統函數一般根據功能封裝在不同的包內,比如Print、Printf、Println都在fmt包內,Abs、Sin都在math包內,Listen、Dial都在net包內等等。如果要使用系統函數,就要引入相關的包。看下面代碼:
package mainimport "fmt"import "math"func main() { a := math.Abs(-1) fmt.Println(a)}
其實程式的最初入口main函數其實也是定義在一個包內,就叫main包。
注意:如果沒有使用包內的資源而匯入這個包,這在Go語言是不允許的,系統會報出錯誤資訊。
2、自訂函數
Go語言中的函數和C最大的不同點在於可以返回多個值。
函數格式:
自訂函數使用關鍵詞func,定義的格式如下:
func 函數名(參數1 參數1類型, 參數2 參數2類型,...) (傳回值類型1,傳回值類型2,...) { 函數體 return var1, var2 ....}
- 函數名:就是函數的名稱, 由字母、數字、底線組成,其中首個字母不能為數字。在同一個包內,函數名稱不能重名。
- 參數:聲明參數要指明類型,如果所有參數一致,則只要在最後加上1個型別宣告就可以了。
- 傳回值:其中var1,var2,…的資料類型要分別和傳回型別1,傳回型別2,…相同。如果只有一個傳回值,在聲明傳回值類型時可以不用小括弧。
求兩個數的和的函數樣本:
func Sum(a, b int) int { //這邊a, b是都是int型,所有在最後加上一個int就可以了 return a + b}
指明傳回值名稱的函數樣本:
Go語言中的函數還有一個有意思的特性,如果在傳回值型別宣告中,直接指明傳回值名稱,那麼在return語句中就不需要顯示返回參數。如下例:
func Power(a int) (result int) { result = a * a return }
上例中指明了傳回值的名稱,所以在函數中可以不用聲明result就直接使用,在函數返回時直接return就可以了。注意:如果指明傳回值名稱,即使只有一個傳回值,也要用小括弧括起來。
多個傳回值的函數樣本:
這個函數是用來求一個整形數組中的最小值和最大值的。
func ExtremumInArray(array []int) (int, int) { if len(array) < 1 { return 0, 0 } min := array[0] max := array[0] for _, v := range array { if v < min { min = v } else if v > max { max = v } } return min, max}
調用時,用逗號分隔返回的變數就可以了。
min, max := ExtremumInArray(array)