func subn1(x, y int) int {sub := x - yreturn sub
}
函数参数简写,可以省略前边的,和后边的类型一样
func addn1(x ...int) int {sum := 0for _, v := range x {sum += v}return sum
}
求可变参数的核,表示传参的个数不确定
func addn1(x int, y ...int) int {sum := 0for _, v := range y {sum += v}x=sumreturn x
}
返回值命名法
func calc1(x, y int) (sum int, sub int) {sum = x + ysub = x - yreturn
}
自定义函数类型
func add(x, y int) int {return x + y
}func main() {var c calcc = addfmt.Printf("%T\n", c)fmt.Println(c(10, 5))}
函数作为另一个函数的参数并且函数作为返回值
func add(x, y int) int {return x + y
}type calcType func(int, int) intfunc 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("异常")
}