Go函数相关知识分享
一、init函数
1、特点:会在main
函数执行之前被Go的运行框架所运行
package main
import (
"fmt"
)
//init在main前面运行,可以数据初始化
func init(){
fmt.Println("init打印") //类似与构造函数
}
func main(){
fmt.Println("main打印")
}
上述代码输出结果为:
2、作用:完成一些初始化赋值的工作
3、注意事项:init
函数在全局变量执行后执行
当main.go
调用util.go
的时候,且都拥有全局变量以及init函数时的执行顺序
二、匿名函数
1、定义:匿名函数就是没有名字的函数
2、使用方式
匿名函数的使用方式一(只调用一次该函数)
func main(){
res:=func (n1 int,n2 int) int {
return n1+n2
}(10,20)
fmt.Println("res=",res)
}
匿名函数的使用方式二(将函数赋值给变量,通过该变量来调用匿名函数)
func main(){
a:=func (n1 int,n2 int) int {
return n1+n2
}
res:=a(10,20)
fmt.Println("res=",res)
}
3 、全局匿名函数
将匿名函数的使用方式二定义到全局变量中,即a为全局匿名函数,在该包内的子函数都可以调用该匿名函数。
三、函数的错误处理
背景:
1、在默认情况下,出现panic
错误,程序就会退出(崩溃),我们希望可以捕获错误,程序仍然可以继续运行。
2、由于Go语言追求美观,所以不在使用传统的try...catch...
,所以引入defer
,panic
,recover
,当Go中抛出一个panic的异常,然后在defer中通过recover捕获这个异常,在正常处理。
func testError(){
defer func(){
err:=recover() //内置函数捕获异常
if err!=nil{
fmt.Println("err=",err)
fmt.Println("发送信息给管理员")
}
}() //这里将错误信息发送信息
num:=1
num2:=0
res:=num/num2 //0不能做分母,这个是必错的代码
fmt.Println(res)
}
3、自定义错误
erroes.New(“错误说明”);返回一个erroe类型的值,表示一个错误,然后panic接收,输出错误信息,并且退出程序,在错误代码之后的的代码不运行
//自定义错误
func readConfig(name string)error{
b:=strings.HasSuffix(name,"fig")
if b==true{
return nil
}else{
//返回自定义错误
return errors.New("文件名不正确")
}
}
func errRead(){
result:=readConfig("mmp.fi")
if result !=nil{
panic(result)
}else{
fmt.Println("没错误,继续执行")
}
}
func main(){
// testError()
// fmt.Println("发送邮件") //莫尔尼情况下不能到这一行
errRead()
fmt.Println("下面代码不执行了")
}
如果阅读完毕对你有一点帮助,请点赞支持,谢谢