1. 程式人生 > >GO基礎程式設計-自定義函式

GO基礎程式設計-自定義函式

	想知道更多區塊鏈技術,請百度【鏈客區塊鏈技術問答 社群】

定義格式
函式構成程式碼執行的邏輯結構。在Go語言中,函式的基本組成為:關鍵字func、函式名、引數列表、返回值、函式體和返回語句。

Go 語言函式定義格式如下:
func FuncName(/引數列表/) (o1 type1, o2 type2/返回型別/) {
//函式體、
return v1, v2 //返回多個值
}
函式定義說明:
func:函式由關鍵字 func 開始宣告
funcName:函式名稱,根據約定,函式名首字母小寫即為private,大寫即為public
引數列表:函式可以有0個或多個引數。
返回型別:
① 上面返回值什麼兩個變數名,當然這不是必須的,可以有型別,沒變數。
② 如果只有一個返回值且不宣告返回值變數,那麼你可以省略,包括返回值的括號。
③ 如果沒有返回值,那麼就直接省略最後的返回資訊。
④ 如果有返回值, 那麼必須在函式的內部新增return語句
函式定義。
無參無返回值
func Test() { //無參無返回值函式定義
fmt.Println(“this is a test func”)
}

func main() {
Test() //無參無返回值函式呼叫
}
有參無返回值
普通引數列表
func Test01(v1 int, v2 int) { //方式1
fmt.Printf(“v1 = %d, v2 = %d\n”, v1, v2)
}
func Test02(v1, v2 int) { //方式2, v1, v2都是int型別
fmt.Printf(“v1 = %d, v2 = %d\n”, v1, v2)
}
func main() {
Test01(10, 20) //函式呼叫
Test02(11, 22) //函式呼叫
}
不定引數列表
不定引數型別
不定引數是指函式傳入的引數個數為不定數量。為了做到這點,首先需要將函式定義為接受不定引數型別:
//形如…type格式的型別只能作為函式的引數型別存在,並且必須是最後一個引數func Test(args …int) {
for _, n := range args { //遍歷引數列表
fmt.Println(n)
}
}
func main() {
//函式呼叫,可傳0到多個引數
Test()
Test(1)
Test(1, 2, 3, 4)
}
不定引數的傳遞
func MyFunc01(args …int) {
fmt.Println(“MyFunc01”)
for _, n := range args { //遍歷引數列表
fmt.Println(n)
}
}
func MyFunc02(args …int) {
fmt.Println(“MyFunc02”)
for _, n := range args { //遍歷引數列表
fmt.Println(n)
}
}
func Test(args …int) {
MyFunc01(args…) //按原樣傳遞, Test()的引數原封不動傳遞給MyFunc01
MyFunc02(args[1:]…) //Test()引數列表中,第1個引數及以後的引數傳遞給MyFunc02
}
func main() {
Test(1, 2, 3) //函式呼叫
}
無參有返回值
有返回值的函式,必須有明確的終止語句,否則會引發編譯錯誤。
一個返回值
func Test01() int { //方式1
return 250
}
//官方建議:最好命名返回值,因為不命名返回值,雖然使得程式碼更加簡潔了,但是會造成生成的文件可讀性差
func Test02() (value int) { //方式2, 給返回值命名
value = 250
return value
}

func Test03() (value int) { //方式3, 給返回值命名
value = 250
return
}
func main() {
v1 := Test01() //函式呼叫
v2 := Test02() //函式呼叫
v3 := Test03() //函式呼叫
fmt.Printf(“v1 = %d, v2 = %d, v3 = %d\n”, v1, v2, v3)
}
多個返回值
func Test01() (int, string) { //方式1
return 250, “sb”
}
func Test02() (a int, str string) { //方式2, 給返回值命名
a = 250
str = “sb”
return
}
func main() {
v1, v2 := Test01() //函式呼叫
_, v3 := Test02() //函式呼叫, 第一個返回值丟棄
v4, _ := Test02() //函式呼叫, 第二個返回值丟棄
fmt.Printf(“v1 = %d, v2 = %s, v3 = %s, v4 = %d\n”, v1, v2, v3, v4)
}
有參有返回值
//求2個數的最小值和最大值
func MinAndMax(num1 int, num2 int) (min int, max int) {
if num1 > num2 { //如果num1 大於 num2
min = num2
max = num1
} else {
max = num2
min = num1
}
return
}
func main() {
min, max := MinAndMax(33, 22)
fmt.Printf(“min = %d, max = %d\n”, min, max) //min = 22, max = 33
}