今天我們就來說說Go語言中函數(shù)的定義方式,幾乎所有的語言都有函數(shù)录语,所以我在這里認(rèn)為大家有一種編程語言的經(jīng)驗(yàn)了倍啥,什么形參什么虛參什么是返回值,這些概念就不給大家一一介紹了澎埠,如果不懂的同學(xué)可以私下找我虽缕, 我給你但講。蒲稳。氮趋。在這里給大家補(bǔ)充一個(gè),方法與函數(shù)的區(qū)別江耀,因?yàn)樵趈ava中基本都是叫方法剩胁,Pyhton基本有函數(shù)與方法這兩個(gè)稱呼,Go中沒有對(duì)象的概念所以他只有函數(shù)這個(gè)叫法祥国,那么這兩種說法分別代表什么意思昵观?其實(shí)它倆是一樣的,如果你非要糾結(jié)說一下不同那么
- 方法:設(shè)計(jì)層面
- 函數(shù):程序運(yùn)行舌稀、過程式的稱謂
ok,關(guān)于函數(shù)的前奏就講那么多啊犬,我們直接上一段Go的函數(shù)
func test(a ,b int, op string) int
函數(shù)的定義是乎與變量的定義是一樣的,都是類型在后壁查,名稱在前
上面的test函數(shù)有點(diǎn)簡(jiǎn)單了觉至,我們來點(diǎn)復(fù)雜點(diǎn)的
func eval(a, b int, op string) (int, error) {
switch op {
case "+":
return a + b, nil
case "-":
return a - b, nil
case "*":
return a * b, nil
case "/":
q, _ := div(a, b)
return q, nil
default:
return 0, fmt.Errorf(
"unsupported operation: %s", op)
}
}
這里需要注意的是eval函數(shù)接受兩個(gè)參數(shù), 一個(gè)是int, 一個(gè)是error 關(guān)于這個(gè)error呢我們前幾節(jié)講過了睡腿,這是Go的一種特殊的用法
我們?cè)賮硪粋€(gè)數(shù)學(xué)計(jì)算
func div(a, b int) (q, r int) {
return a / b, a % b
}
div函數(shù)就是一個(gè)整除與求余的函數(shù)语御,這個(gè)函數(shù)的返回值,可以公用一個(gè)int席怪,是不是還不錯(cuò)呢SΥ场!何恶!
從這幾個(gè)函數(shù)中孽锥,我們基本就能得到一些Go函數(shù)的共有特征
- 函數(shù)返回值可以起多個(gè)名字
- 但是這種僅限于非常簡(jiǎn)單的函數(shù)
- 對(duì)于調(diào)用者而言沒有任何區(qū)別
其實(shí)函數(shù)還可以作為參數(shù),可以作為返回值细层。
舉個(gè)例子給同學(xué)們看一下
func apply(op func(int, int) int, a, b int) int {
return op(a, b)
}
apply 函數(shù)有三個(gè)參數(shù)一個(gè)int返回值惜辑,里面的op 類型是一個(gè)匿名函數(shù)它有兩個(gè)參數(shù)一個(gè)int返回值。
Go里面的參數(shù)沒有可變參數(shù)疫赎、操作符重載盛撑、函數(shù)重載這些概念,但是我們可以通過一些特殊的方式捧搞,實(shí)現(xiàn)這些功能抵卫,比如今天我們講可變參數(shù)在Go中怎么操作。
我們來計(jì)算1加到100
func sum(numbers ...int) int {
s := 0
for i := range numbers {
s += numbers[i]
}
return s
}
在sum函數(shù)中我們就用可變參數(shù)列表胎撇,實(shí)現(xiàn)了其他語言中一部分可變參數(shù)的功能介粘,怎么樣你學(xué)會(huì)了嘛。如果同學(xué)們碰到了哪里不懂的晚树,可以在我們的群里面追問姻采,謝謝大家!>粼鳌?住!宝鼓!