go语言学习2-函数

go语言学习2-函数,第1张

go语言学习2-函数 函数格式

函数参数和返回值
func main() {

	println("无参数无返回值函数")
	myFunc1()
	println("有参数无返回值")
	myFunc2(2,2.9)

	println("不定参数")
	myFun3(1,2,3,4,5)

	var a,b,c int
	a = myFunc4(2,2)
	println("----------",a)


	b,c = myFunc5(2,2)
	println("----------",b,c)

}
//无参数无返回值函数
func myFunc1()  {
	println("11111")
}
//有参数无返回值
func myFunc2(a int,b float32)  {
	fmt.Println(a,b)
}
//不定参数
func myFun3(a int,args...int)  {
	println("参数的个数",len(args))

	for i,data:=range args{
		println(i,data)
	}
}
//有参数有一个返回值
func myFunc4(a int,b int)(result int)  {

	result = a + b
	return result
}

//有参数有多个返回值
func myFunc5(a int,b int)(result1 int,result2 int)  {

	result1 = a + b
	result2 = a - b
	return result1,result2
}
函数类型
//函数类型
//定义两个int参数,一个int返回值的函数类型,之后可以定义这个函数类型的变量
type MyFuncType func(int,int)(int)

func main() {

	var myfunc MyFuncType

	myfunc = add

	var result int
	result  = myfunc(8,9)
	println(result)
	myfunc = jian
	result  = myfunc(8,9)
	println(result)

}

func add(a,b int)(result int){
	result = a+b
	return result
}
func jian(a,b int)(result int){
result = a-b
return result
}

回调函数
//回调函数
//多态(函数类型相同,但函数的实现不同),可以先定义,但是没有实现
type MyFuncType func(int,int)(int)

func main() {

	var a int
	a = MyFunc(1,2,add)
	println(a)
	a = MyFunc(1,2,jian)
	println(a)
	
}

func MyFunc(a,b int,funcType MyFuncType)(result int)  {

	result = funcType(a,b)
	return  result
}

func add(a,b int)(result int){
	result = a+b
	return result
}
func jian(a,b int)(result int){
result = a-b
return result
}

匿名函数

匿名函数可以捕获同一级的其他变量,用来实现闭包

func main() {

	var a  = 10
	f1 := func(){
		println(a)
	}
	f1()

}
闭包

其实就是定义匿名函数后直接调用,闭包已引用方式捕获同级变量(会改变)
闭包只要还在使用变量,那么这个变量就存在,而不会被回收。

无参数无返回值的闭包

func main() {

	var a  = 10
	func(){
		println(a)
	}()


}

有参数有返回值的闭包

func main() {

	var a = 10
	var b = 20
	num := func(num1,num2 int)(result int){

		result = num1 + num2
		return result
	}(a,b)

	println(num)

}
资源释放defer

在函数释放前执行,非正常释放(如崩溃)也会执行
多个defer先进后出

func main() {

	var a = 10
	var b = 20
	num := func()(result int){
		defer println("执行结束")
		result = a + b
		println("函数返回")
		return result
	}()

	println(num)

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5718129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存