本文系第六篇Golang語言學習教程
聲明函數
文法
func name(parametername type) returntype { //函數體(具體實現的功能)}
函式宣告包括:
函數名name
:自訂的函數名
形式參數列表()
:()中定義,描述了函數的參數名以及參數類型
傳回值列表rerurntype
:描述了函數傳回值的變數以及類型
函數體{}
:具體實現功能的代碼
函式宣告釋義
函數的聲明以關鍵詞func
開始,後面緊跟自己定義的函數名name(函數名)
,
函數的參數列表定義在()
之間,
傳回值的類型定義在returntype
(傳回值列表)處,
包含在{}
之間的就是函數體。
註:聲明一個參數的文法為參數名 參數類型,聲明多個參數採用(參數名 參數類型, 參數名 參數類型)的形式。
函數中參數列表和傳回值並非必須的,是可以省略的。
例:以下函式宣告也是有效
func testfunc(){ //此函數不需要輸入參數,且沒有傳回值}
樣本函數
//平分糖果的函數,輸入參數是總共的糖果數量和人的數量,兩者的商為每人分的數量,作為傳回值func Candy(total int, people int) int { //參數類型相同時可寫成(total, people int) var avg = total / people //平均值 = 總數 / 人數 return avg //返回平均值}
上述有兩個整型的輸入,total
和people
,傳回值為avg
,也是整數類型。
現在已經定義了一個函數,需要在程式中調用這個函數。調用函數的文法為:name(parametername)
,如下:
Candy(20, 5)
完成了函數的聲明與調用後,就可以寫出一個完整的程式,將每個人分到的糖果輸出:
package mainimport "fmt"//平分糖果的函數,輸入參數是總共的糖果數量和人的數量,兩者的商為每人分的數量,作為傳回值func Candy(total int, people int) int { //參數類型相同時可寫成(total, people int) var avg = total / people return avg}func main(){ avg := Candy(20, 5) fmt.Println("Everyone can get", avg)}
以上程式運行結果為:
Everyone can get 4
多傳回值
Go語言支援一個函數有多個傳回值。
例:
package mainimport ( "fmt")//求長方形周長和面積的函數,輸出參數是長和寬,周長是長和寬之和的兩倍,面積是長和寬的乘積func rectangle(length,width int)(int, int) { var perimeter= (length + width) * 2 var area= length * width return perimeter, area}func main (){ perimeter, area := rectangle(20, 5) fmt.Println("the perimeter is", perimeter, "and the area is", area)}
如果一個函數有多個傳回值,必須用()括起來,以上程式中兩個傳回值分別為perimeter
和area
。
以上程式運行結果為:
the perimeter is 50 and the area is 100
若只想調用一個傳回值,則將另一傳回值用_
代替:
perimeter, _ := rectangle(20, 5)
命名傳回值
從函數中可以命名一個傳回值,一旦命名了傳回值,可以認為這些值在函數的第一行就被聲明變數,在函數體中不需要聲明。
上面的rectangle
函數可以寫成:
func rectangle(length,width int)(perimeter, area int) { //在第一行中命名傳回值,聲明變數 perimeter= (length + width) * 2 area= length * width return //不需要指定傳回值,預設返回 perimeter, area}
仔細對比上面兩種寫法發現,命名傳回值在 rerurntype
傳回值列表段聲明了傳回值,在函數體中不需要聲明變數,直接等於值即可。