首页 > 其他 > 详细

Go函数小结(二)

时间:2020-04-02 20:41:35      阅读:55      评论:0      收藏:0      [点我收藏+]

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")
}

  

Go函数小结(二)

原文:https://www.cnblogs.com/flycc/p/12622018.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!