go语言匿名函数的使用
packagemain import( "fmt" "go_code/chapter02/funinit/utils" ) //3、全局匿名函数 var( Fun1=func(n1int,n2int)int{ returnn1*n2 } ) //init函数,通常在init函数中完成初始化工作 funcmain(){ //1、在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次 res1:=func(n1int,n2int)int{ returnn1+n2 }(10,20) fmt.Println("res1=",res1) //2、a的数据类型就是函数类型,此时我们可以通过a完成调用 a:=func(n1int,n2int)int{ returnn1+n2 } res2:=a(100,1000) fmt.Println("res2=",res2) res3:=Fun1(100,1000) fmt.Println("res3=",res3) fmt.Println("main......") fmt.Println("Ageisvalue",utils.Age,"Nameisvalue",utils.Name) }
没什么好说的,见一个,熟悉一个:
packagemain import( "fmt" ) funcmain(){ func(){ fmt.Printf("func1\n") }() func(xint){ fmt.Printf("func2,xis%d\n",x) }(2) a:=func(xint)int{ fmt.Printf("func3,xis%d\n",x) return5 } fmt.Println(a(3)) fmt.Printf("%T\n",func(){ fmt.Printf("func1\n") }) fmt.Printf("%T\n",func(xint){ fmt.Printf("func2,xis%d\n",x) }) fmt.Printf("%T\n",a) }
结果:
func1
func2,xis2
func3,xis3
5
func()
func(int)
func(int)int
继续看:
packagemain import( "fmt" ) funcmain(){ test(func(xstring){ fmt.Println(x) }) } functest(ffunc(string)){ f("hello") }
结果:hello
但如下都错误,想想为什么:
packagemain import( "fmt" ) funcmain(){ func(){ fmt.Printf("func1\n") } } packagemain import( "fmt" ) funcmain(){ test(funcg(xstring){ fmt.Println(x) }) } functest(ffunc(string)){ f("hello") }
最后,看看下面两个正确程序的:
packagemain import( "fmt" ) varx="hello" funcmain(){ test(func(x*string){ *x="world" }) fmt.Println(x) } functest(ffunc(*string)){ } packagemain import( "fmt" ) funcmain(){ vars1="hello" vars2="world" test(func(x*string,y*string){ *x+="_123" *y+="_456" },&s1,&s2) fmt.Println(s1,s2)//hello_123world_456 } functest(ffunc(*string,*string),s1*string,s2*string){ f(s1,s2) } packagemain import( "fmt" ) vars1="hello" vars2="world" funcmain(){ test(func(x*string,y*string){ *x+="_123" *y+="_456" }) fmt.Println(s1,s2)//hello_123world_456 } functest(ffunc(*string,*string)){ f(&s1,&s2) }
不多说。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接