目录
Golang中用func来声明函数,格式如下:?
func 函数名(参数列表) 返回值类型{ //若没有返回值,则不用写
函数体
}
比如定义一个名为Add的函数,返回两数之和。
func Add(x int,y int) int { //此处可简写:func Add(x,y int) int
return x+y
}
Golang中,函数也是类型,可以存在变量中。
格式:
var 变量名 func()
//赋值:
变量名=函数名
示例:
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)
}
Go支持可变参数。
格式如下:
func 函数名(固定参数列表,v ...T) 返回值类型 { //如果有固定参数,可变参数必须放在参数列表的末尾
函数体
}
“v ...T”代表的其实就是v为T类型的切片。
示例,还是用Add函数,但可以将任意多个数相加:
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))
}
匿名函数就是在需要函数时定义函数,常用于实现闭包。
匿名函数格式:
func(参数列表) 返回值类型 {
函数体
}
匿名函数的调用:
在定义的同时调用匿名函数。
示例:
package main
import "fmt"
func main() {
func(a,b int) {
fmt.Print(a+b)
}(1,3)
}
输出4。
闭包就是包含了自由变量的匿名函数,其中的自由变量即使已经脱离了原有的自由变量环境也不会被删除,在闭包的作用域内可继续使用这个自由变量,同一个匿名函数和不同的引用环境组成了不同的闭包。闭包可对作用有内的变量的引用进行修改。
例子:
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)
}
运行结果:
1
100
a1闭包的地址为:0xc00001e018 a2闭包的地址为:0xc00001e038
小结
Golang中,用关键字func定义函数。
Go语言支持可变参数,即参数的个数没有固定(可变参数要放在参数列表的最后)
闭包就是包含了自由变量的匿名函数,其中的自由变量即使已经脱离了原有的自由变量环境也不会被删除。
Golang内置函数
Go自带了许多函数,使用时直接调用。简要列举出了Go的一些内置函数。
对切片的操作做一个简单地示例:
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("复制成功!\n")
fmt.Println("length of targetSlice:",len(targetSlice))
}
运用Go的内置函数可解决许多问题!
求个点赞!