本文系第六篇Golang語(yǔ)言學(xué)習(xí)教程
聲明函數(shù)
語(yǔ)法
func name(parametername type) returntype {
//函數(shù)體(具體實(shí)現(xiàn)的功能)
}
函數(shù)聲明包括:
函數(shù)名name:自定義的函數(shù)名
形式參數(shù)列表():()中定義,描述了函數(shù)的參數(shù)名以及參數(shù)類型
返回值列表rerurntype:描述了函數(shù)返回值的變量以及類型
函數(shù)體{}:具體實(shí)現(xiàn)功能的代碼
函數(shù)聲明釋義
函數(shù)的聲明以關(guān)鍵詞func開始,后面緊跟自己定義的函數(shù)名name(函數(shù)名),
函數(shù)的參數(shù)列表定義在()之間,
返回值的類型定義在returntype(返回值列表)處,
包含在{}之間的就是函數(shù)體。
注:聲明一個(gè)參數(shù)的語(yǔ)法為參數(shù)名 參數(shù)類型,聲明多個(gè)參數(shù)采用(參數(shù)名 參數(shù)類型, 參數(shù)名 參數(shù)類型)的形式。
函數(shù)中參數(shù)列表和返回值并非必須的,是可以省略的。
例:以下函數(shù)聲明也是有效的
func testfunc(){
//此函數(shù)不需要輸入?yún)?shù),且沒有返回值
}
示例函數(shù)
//平分糖果的函數(shù),輸入?yún)?shù)是總共的糖果數(shù)量和人的數(shù)量,兩者的商為每人分的數(shù)量,作為返回值
func Candy(total int, people int) int { //參數(shù)類型相同時(shí)可寫成(total, people int)
var avg = total / people //平均值 = 總數(shù) / 人數(shù)
return avg //返回平均值
}
上述有兩個(gè)整型的輸入,total和people,返回值為avg,也是整數(shù)類型。
現(xiàn)在已經(jīng)定義了一個(gè)函數(shù),需要在程序中調(diào)用這個(gè)函數(shù)。調(diào)用函數(shù)的語(yǔ)法為:name(parametername),如下:
Candy(20, 5)
完成了函數(shù)的聲明與調(diào)用后,就可以寫出一個(gè)完整的程序,將每個(gè)人分到的糖果輸出:
package main
import "fmt"
//平分糖果的函數(shù),輸入?yún)?shù)是總共的糖果數(shù)量和人的數(shù)量,兩者的商為每人分的數(shù)量,作為返回值
func Candy(total int, people int) int { //參數(shù)類型相同時(shí)可寫成(total, people int)
var avg = total / people
return avg
}
func main(){
avg := Candy(20, 5)
fmt.Println("Everyone can get", avg)
}
以上程序運(yùn)行結(jié)果為:
Everyone can get 4
多返回值
Go語(yǔ)言支持一個(gè)函數(shù)有多個(gè)返回值。
例:
package main
import (
"fmt"
)
//求長(zhǎng)方形周長(zhǎng)和面積的函數(shù),輸出參數(shù)是長(zhǎng)和寬,周長(zhǎng)是長(zhǎng)和寬之和的兩倍,面積是長(zhǎng)和寬的乘積
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)
}
如果一個(gè)函數(shù)有多個(gè)返回值,必須用()括起來,以上程序中兩個(gè)返回值分別為perimeter和area。
以上程序運(yùn)行結(jié)果為:
the perimeter is 50 and the area is 100
若只想調(diào)用一個(gè)返回值,則將另一返回值用_代替:
perimeter, _ := rectangle(20, 5)
命名返回值
從函數(shù)中可以命名一個(gè)返回值,一旦命名了返回值,可以認(rèn)為這些值在函數(shù)的第一行就被聲明變量,在函數(shù)體中不需要聲明。
上面的rectangle函數(shù)可以寫成:
func rectangle(length,width int)(perimeter, area int) { //在第一行中命名返回值,聲明變量
perimeter= (length + width) * 2
area= length * width
return //不需要指定返回值,默認(rèn)返回 perimeter, area
}
仔細(xì)對(duì)比上面兩種寫法發(fā)現(xiàn),命名返回值在 rerurntype 返回值列表段聲明了返回值,在函數(shù)體中不需要聲明變量,直接等于值即可。
以上為學(xué)習(xí)Golang函數(shù)篇