我的 golang 学习笔记系列二:golang的函数运用
函数介绍
特点
- 无需声明原型
- 支持不定变参
- 支持多返回值
- 支持命名返回参数
- 支持匿名函数和必报
- 函数也是一种类型,一个函数可以赋值给变量
- 不支持嵌套一个包不能有两个名字一样的函数
- 不支持重载
- 不支持默认参数
示例
闭包的作用域
// test 闭包测试
func test() func() {
// 此次 i 的作用域是在 test 函数中 和闭包中的内存地址是一样的
i := 0
// 闭包的作用域 是一样的 类似与PHP中的 use(&i)
return func() {
i ++
fmt.Println(i)
}
}
defer函数
func def() {
// 延迟执行,会在函数执行完之后执行,如:函数return之前
// 如果有多个则以 栈 结构顺序执行 defer index()
}
pinic 函数(抛出异常)和recover函数(捕获异常)
func pa() {
// 捕获异常
defer func() {
fmt.Println("捕获到异常",recover())
}()
// 相当于 throw
panic("这是异常")
}
封装try catch 及异常捕获
// 异常捕获
try(func() {
fmt.Println("正常执行方法")
panic("我执行错误了")
}, func(err interface{}) {
// 异常处理
fmt.Println("当前方法执行错误:,错误信息为:",err)
})
// 封装try catch
// interface{} 可以接受所有异常
// fun 正常方法
// catch 异常处理的方法
func try(fun func(),catch func(err interface{})) {
defer func() {
if err := recover(); err != nil{
catch(err)
}
}()
fun()
}
返回型捕获异常写法
// 异常方法处理
_,err := sumerr()
if err != nil {
fmt.Println("加运算方法执行出错了,错误信息为:",err)
}
// 如果出错则返回异常
func sumerr() (int, error) {
return 9,errors.New("方法sumerr 执行错误,除数不能为0")
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: