首页 > 其他分享 >golang init函数、defer函数、匿名函数、错误处理

golang init函数、defer函数、匿名函数、错误处理

时间:2023-08-24 15:44:13浏览次数:33  
标签:defer 函数 fmt init func Println 错误处理 main

1. init

每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用,当有全局变量跟main函数 init 函数 同时出现的时候 执行的顺序是 全局函数==》init函数==》main函数

package main

import "fmt"
func test() string{
	return "hello"
}
func init(){
	fmt.Println("init")
}
func main() {
	fmt.Println("main")
	fmt.Println(test())
}

  

2.defer

在函数中 经常用于创建资源(比如 数据库的链接 文件句柄 锁 等)为了在函数执行完毕后 及时的释放资源 Go 设计者提供 defer (延时机制)

package main

import "fmt"
func test(a int,b int) int{
	defer func() { fmt.Println("a = ", a) }()
	defer func() { fmt.Println("b = ", b) }()
	println(a+b)
	return a+b
}
func main() {
	fmt.Println("main:",test(3,5))

  

匿名函数

Go支持匿名函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用

func main() {
	res := func(n1 int, n2 int) int {
		return n1 + n2
	}(10, 20)
	fmt.Println(res)
}

  

4.错误处理

Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理

package main

import "fmt"

func main() {
	test()
}
func test() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println(err)
		}
	}()
	num := 10
	num1 := 0
	res := num / num1
	fmt.Println(res)
}

  

标签:defer,函数,fmt,init,func,Println,错误处理,main
From: https://www.cnblogs.com/fczlm/p/17654284.html

相关文章

  • 定义一个函数,传入一个字典和一个元组,将字典的值(key不变)和元组的值交换,返回交换后的
    知识点:zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。li=[3,4,5]t=(7,8,9)print(list(zip(li,t)))print(dict(zip(li,t)))运行截图:例1:deff(a,b):print(a)print(b)#先获取对应的元素b......
  • C++构造函数、析构函数、初始化列表
    构造函数构造函数就是与类名同名的成员函数,当实例化对象时它会自动执行,当构造函数执行结束后,对象才完成实例化任务:一般负责对类对象进行初始化、资源分配class类名{int*p;public:类名(参数){p=newint;}}......
  • C++内联函数、引用、强制类型转换
    三、内联函数inline1、普通函数普通函数会被编译成二进制指令存储在代码段中,调用语句会生成一条跳转指令,当程序运行到调用语句时,会跳转该函数在代码段中对应的位置执行,执行结束会返回2、什么是内联函数内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内......
  • C++虚函数、虚继承:virtual
    ​1.引子在类的继承当中曾经出现过这样一种情况:B、C继承自A,D继承自B和C。 之前提到过,这种情况下,关于类A当中的内容,会被复制成两份给到D,当进行访问的时候,需要指定C或者B,才能够定位到A当中的变量是来自哪里。就像下面这样。​ 代码表示:classA{public:A(int......
  • 成员函数
    一、对象的创建和销毁过程Ⅰ.对象的创建过程给对象划分内存空间执行初始化列表①根有参构造据继承表的顺序调用父类的无参构造或者通过:父类名(val)调用父类的有参构造②根据成员变量的定义顺序调用类类型成员的无参构造或有参构造通过:类类型命成员(val)调用类类......
  • openGauss学习笔记-48 openGauss 高级数据管理-函数
    openGauss学习笔记-48openGauss高级数据管理-函数openGauss常用的函数如下:48.1数学函数abs(x)描述:绝对值。返回值类型:和输入相同。示例:openGauss=#SELECTabs(-17.4);abs------17.4(1row)cbrt(dp)描述:立方根。返回值类型:doubleprecision示例:openGauss......
  • c语言的可重入和不可重入函数
    先贴上一篇优秀的博文链接:C语言之可重入函数和不可重入函数_c可重入函数_KiranWang的博客-CSDN博客  总结:不可重入函数的四种情况1.静态数据结构:如静态局部变量活全局变量2.malloc()或者free()函数因为这两个函数都会操作全局的链表,如果第一次malloc没结束时,再被一次malloc......
  • 无涯教程-PHP Mock Test函数
    本节介绍了与PHP相关的各种模拟测试。您可以在本地计算机上下载这些样本模拟测试,并在方便时离线解决。每个模拟测试均随附一个模拟测试键,可让您验证最终分数并为自己评分。MockTestIMockTestIIMockTestIIIMockTestIVQ1-关于PHP,以下哪项是正确的?A-PHP是......
  • memmove函数
    参考引入问题intmain(){intarr1[10]={1,2,3,4,5,6,7,8,9,10};my_memcpy(arr1+2,arr1,20);for(inti=0;i<10;i++){printf("%d",arr1[i]);}return0;}上面一段代码我们的目的是想把到5的数字共20个字节拷贝到原来3到7的数字的位置上。然后我们看到其......
  • isEmpty工具函数
    在**项目开发中,需要在对未知数据类型做判空处理,期待空值列表:undefined、null、''、NaN、[]、{},注意非空:0、false;而常见的lodash.isEmpty,!value均不能直接满足我们的需求,那么我们需要抽离一个工具函数isEmpty; 接口返回表格字段的数据:表格中使用switch:0(或者false)......