Go入门之函数
func subn1(x, y int) int {
sub := x - y
return sub
}
函数参数简写,可以省略前边的,和后边的类型一样
func addn1(x ...int) int {
sum := 0
for _, v := range x {
sum += v
}
return sum
}
求可变参数的核,表示传参的个数不确定
func addn1(x int, y ...int) int {
sum := 0
for _, v := range y {
sum += v
}
x=sum
return x
}
返回值命名法
func calc1(x, y int) (sum int, sub int) {
sum = x + y
sub = x - y
return
}
自定义函数类型
func add(x, y int) int {
return x + y
}
func main() {
var c calc
c = add
fmt.Printf("%T\n", c)
fmt.Println(c(10, 5))
}
函数作为另一个函数的参数并且函数作为返回值
func add(x, y int) int {
return x + y
}
type calcType func(int, int) int
func calc1(x, y int, cb calcType) int {
return cb(x, y)
}
func main() {
sum := calc1(5, 10, add)
fmt.Println(sum)
}
匿名自执行函数
var fn = func(x, y int) int {
return x * y
}
fmt.Println(fn(2, 3))
也可以接收参数
func(x, y int) {
fmt.Println(x + y)
}(10, 20)
函数的闭包,函数里面嵌套一个函数,最后返回里面的函数。可以作用局部变量常驻内存,不污染全局
********************
defer 延迟执行改语句 panic抛出一个异常 ,recover接异常 必须在defer中
func f() {
defer func() {
err := recover()
if err != nil {
fmt.Println(err)
}
}()
panic("异常")
}