柚子快報(bào)邀請(qǐng)碼778899分享:開(kāi)發(fā)語(yǔ)言 Golang函數(shù)
柚子快報(bào)邀請(qǐng)碼778899分享:開(kāi)發(fā)語(yǔ)言 Golang函數(shù)
目錄
函數(shù)變量
可變參數(shù)
匿名函數(shù)與閉包
Golang中用func來(lái)聲明函數(shù),格式如下:?
func 函數(shù)名(參數(shù)列表) 返回值類型{ //若沒(méi)有返回值,則不用寫(xiě)
函數(shù)體
}
比如定義一個(gè)名為Add的函數(shù),返回兩數(shù)之和。
func Add(x int,y int) int { //此處可簡(jiǎn)寫(xiě):func Add(x,y int) int
return x+y
}
函數(shù)變量
Golang中,函數(shù)也是類型,可以存在變量中。
格式:
var 變量名 func()
//賦值:
變量名=函數(shù)名
示例:
package main
import "fmt"
func Minus(x,y int) int {
return x-y
}
func main() {
a:=10
b:=5
var minu func(x,y int) int
minu=Minus
n:=minu(a,b)
fmt.Print(a,"-",b,"=",n)
}
可變參數(shù)
Go支持可變參數(shù)。
格式如下:
func 函數(shù)名(固定參數(shù)列表,v ...T) 返回值類型 { //如果有固定參數(shù),可變參數(shù)必須放在參數(shù)列表的末尾
函數(shù)體
}
“v ...T”代表的其實(shí)就是v為T(mén)類型的切片。
示例,還是用Add函數(shù),但可以將任意多個(gè)數(shù)相加:
package main
import "fmt"
func Add(slice... int) int {
sum:=0
for _,value:=range slice {
sum=sum+value
}
return sum
}
func main() {
fmt.Print("1+2+3+4+5+6+7+8+9=",Add(1,2,3,4,5,6,7,8,9))
}
匿名函數(shù)與閉包
匿名函數(shù)就是在需要函數(shù)時(shí)定義函數(shù),常用于實(shí)現(xiàn)閉包。
匿名函數(shù)格式:
func(參數(shù)列表) 返回值類型 {
函數(shù)體
}
匿名函數(shù)的調(diào)用:
在定義的同時(shí)調(diào)用匿名函數(shù)。
示例:
package main
import "fmt"
func main() {
func(a,b int) {
fmt.Print(a+b)
}(1,3)
}
輸出4。
閉包就是包含了自由變量的匿名函數(shù),其中的自由變量即使已經(jīng)脫離了原有的自由變量環(huán)境也不會(huì)被刪除,在閉包的作用域內(nèi)可繼續(xù)使用這個(gè)自由變量,同一個(gè)匿名函數(shù)和不同的引用環(huán)境組成了不同的閉包。閉包可對(duì)作用有內(nèi)的變量的引用進(jìn)行修改。
例子:
package main
import "fmt"
func Add(i int) func() int {
return func() int {
i++
return i
}
}
func main() {
a1:=Add(0)
fmt.Println(a1())
a2:=Add(99)
fmt.Print(a2())
fmt.Printf("\na1閉包的地址為:%p a2閉包的地址為:%p",&a1,&a2)
}
運(yùn)行結(jié)果:
1
100
a1閉包的地址為:0xc00001e018 a2閉包的地址為:0xc00001e038
小結(jié)
Golang中,用關(guān)鍵字func定義函數(shù)。
Go語(yǔ)言支持可變參數(shù),即參數(shù)的個(gè)數(shù)沒(méi)有固定(可變參數(shù)要放在參數(shù)列表的最后)
閉包就是包含了自由變量的匿名函數(shù),其中的自由變量即使已經(jīng)脫離了原有的自由變量環(huán)境也不會(huì)被刪除。
附錄
Golang內(nèi)置函數(shù)
Go自帶了許多函數(shù),使用時(shí)直接調(diào)用。簡(jiǎn)要列舉出了Go的一些內(nèi)置函數(shù)。
對(duì)切片的操作做一個(gè)簡(jiǎn)單地示例:
package main
import "fmt"
func main() {
sourceSlice:=[]int{1,2}
sourceSlice=append(sourceSlice,3,4)
fmt.Println("sourceSlice:",sourceSlice)
targetSlice:=make([]int,3)
copy(targetSlice,sourceSlice)
fmt.Printf("復(fù)制成功!\n")
fmt.Println("length of targetSlice:",len(targetSlice))
}
運(yùn)用Go的內(nèi)置函數(shù)可解決許多問(wèn)題!
求個(gè)點(diǎn)贊!
柚子快報(bào)邀請(qǐng)碼778899分享:開(kāi)發(fā)語(yǔ)言 Golang函數(shù)
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。