golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名
来源:互联网 发布:大学生网络安全隐患 编辑:程序博客网 时间:2024/06/03 03:11
函数是一个变量类型
package mainimport("fmt")func main() { c := add fmt.Println(c) sum := c(10, 20) fmt.Println(sum)}func add(a, b int) int { return a + b}
输出如下:
0x488a0030
自定义一个type类型函数model
package mainimport("fmt")//定义一个type类型,func(int,int) int 构造一种方法的模型type methodModel func(int,int) int func add(a int ,b int) int { return a+b}//接受一个类似methodModel方法的具体方法func operator(entity methodModel,a int,b int)int{ return entity(a,b)}func main() { var a int = 1 var b int = 2 c:= add sum := operator(c,a,b) fmt.Printf("%d\n",sum)}
输出3
命名返回值、忽略返回值
1、值传递
2、引用传递
注意1:无论是值传递,还是引用传递,传递给函数的都是变量的副本
不过,值传递是值的拷贝。引用传递是地址的拷贝
map、slice、chan、指针、interface默认以引用的方式传递
package mainimport("fmt")func add(a, b int) (c int) { c = a + b return}func calc(a, b int) (sum int, avg int) { sum = a + b avg = (a +b)/2 return}func main() { var a int = 1 var b int = 2 c := add(a,b) fmt.Println(c) sum,_ := calc(a,b) fmt.Println(sum) sum1,avg1 := calc(a,b) ``mt.Println(sum1,avg1)}
输出如下:
333 1
可变参数
package mainimport("fmt")func add(a int,args ... int)(result int) { result = a for i:=0;i<len(args);i++{ result += args[i] } return}func main() { sum := add(1,2,3) fmt.Print(sum)}
输出如下:6
defer用途
- 当函数返回时,执行defer语句。因此,可以用来做资源清理
- 多个defer语句,按先进后出的方式执行
- defer语句中的变量,在defer声明时就决定了
package mainimport("fmt")func add(a int,b int) int{ defer fmt.Println("defer method") return a + b}func main() { defer fmt.Println("defer main1") defer fmt.Println("defer main2") sum := add(1,2) fmt.Print(sum,"\n") defer fmt.Println("defer method after")}
输出如下:
defer method3defer method afterdefer main2defer main1
匿名函数
package mainimport("fmt")//匿名函数1var ( result = func(a int,b int) int{ return a + b })//非匿名函数func sum1(a int,b int)int { return a + b}//匿名函数2func sum2(a int ,b int) int { tempMethod := func(a int ,b int) int { return a + b } return tempMethod(a,b)}func sum3(a int ,b int ) int { resultTemp := func(a int ,b int )int { return a + b }(a,b) return resultTemp}func main() { sum := result(1,2) fmt.Println(sum) method:=sum1 fmt.Println(method(3,4)) fmt.Println(sum2(4,6)) fmt.Println(sum3(7,9))}
输出如下:
371016
阅读全文
0 0
- golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名
- golang defer 语句匿名函数和具名函数的区别
- 8、函数的参数问题、参数传值、return返回值、可变函数和匿名函数
- Python3 基础:返回函数和匿名函数
- golang 匿名函数用法
- golang defer
- JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
- Golang中defer、return、返回值之间执行顺序的坑
- Golang中defer、return、返回值之间执行顺序的坑
- golang基础-双链表、别名、自定义构造函数
- 关于golang的defer、 return、返回值三者的执行逻辑
- copy构造函数调用时机4,函数返回值是匿名对象
- Golang可变参数函数调用
- golang匿名函数(闭包)
- pyhotn3入门基础-14 返回函数和匿名函数
- webbrowser 通过匿名函数返回值
- # MySQL编程基础——自定义函数返回值
- 匿名函数的变量
- 关键字 static和final
- day11
- 1242 斐波那契数列的第N项(矩阵快速幂)
- Idea自动更新JSP页面
- XRecyclerView的使用
- golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名
- 泛型相关
- 用JS实现千分位分隔符
- C++中设定线性表的大小(单链表描述)
- 几种常用的布局技巧
- pycharm中使用github
- 刷新
- day12
- SPOJ