• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Go函数小结(二)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.函数的defer

作用:在函数中,程序员经常要创建资源(比如:数据库连接,文件句柄,锁等),为了在函数执行完成之后及时释放资源,go提供了defer机制,可以在函数执行完成后return前执行

//来一个defer中的经典面试题,求打印顺序
package main

import (
    "fmt"
)

func main() {
    defer_call()
}

func defer_call() {
    defer func() { fmt.Println("打印前") }()
    defer func() { fmt.Println("打印中") }()
    defer func() { fmt.Println("打印后") }()

}

  

 

 由此可见,当程序执行到defer的时候,现将其压入一个栈,然后再执行下一条,当函数执行完毕后,再从defer栈中从栈顶取出执行defer中的语句

注意:在defer入栈时,也会将相关值拷贝入栈,例如值拷贝参数

defer最重要的是可以及时释放资源

 

2.参数的传递方式

函数参数的传递方式有两种:值传递和引用传递

值传递是值得拷贝,引用是地址的拷贝

一般的,引用传递比值传递效率高,所以在函数声明中劲量使用引用传递

值类型:基本的数据类型 int、float、bool、数组和结构体

引用类型:指针、切片、map、channel、interface

 

3 panic的捕获

当程序中出现panic,会导致程序挂死,可以用recover捕获panic,防止程序异常退出,让程序异常可控

package main

import (
    "fmt"
)

func main() {
	defer_call()
	fmt.Println("main exit safty...")
}



func defer_call() {
	defer func(){
		if err := recover();err != nil{
			fmt.Println("get panic,err=",err)
		}
	}()
    defer func() { fmt.Println("打印前") }()
    defer func() { fmt.Println("打印中") }()
	defer func() { fmt.Println("打印后") }()
	panic("I am panic")

}

  

 4、自定义错误处理:
  引用errors包中的New自定义一个错误信息

func newerr()(error){
	return errors.New("i get new err")
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go 设计模式--工厂模式发布时间:2022-07-10
下一篇:
Go 设计模式--抽象工厂模式发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap