golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名

前端之家收集整理的这篇文章主要介绍了golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

函数是一个变量类型

  1. package main
  2.  
  3. import("fmt"
  4.  
  5. )
  6.  
  7. func main() {
  8. c := @H_403_8@add
  9. fmt.Println(c)
  10.  
  11. @H_403_8@sum := c(10,20)
  12. fmt.Println(@H_403_8@sum)
  13. }
  14.  
  15.  
  16. func @H_403_8@add(a,b int) int {
  17. return a + b
  18. }

输出如下:

  1. 0x488a00
  2. 30

自定义一个type类型函数model

  1. package main
  2.  
  3. import("fmt"
  4.  
  5. )
  6. //定义一个type类型,func(int,int) int 构造一种方法的模型
  7. type methodModel func(int,int) int
  8.  
  9. func add(a int,b int) int {
  10. return a+b
  11. }
  12. //接受一个类似methodModel方法的具体方法
  13. func operator(entity methodModel,a int,b int)int{
  14. return entity(a,b)
  15. }
  16.  
  17. func main() {
  18. var a int = 1
  19. var b int = 2
  20. c:= add
  21. sum := operator(c,a,b)
  22. fmt.Printf("%d\n",sum)
  23. }

输出3

命名返回值、忽略返回值

1、值传递
2、引用传递
注意1:无论是值传递,还是引用传递,传递给函数的都是变量的副本
不过,值传递是值的拷贝。引用传递是地址的拷贝
map、slice、chan、指针、interface默认以引用的方式传递

  1. package main
  2.  
  3. import("fmt"
  4.  
  5. )
  6.  
  7. func @H_403_8@add(a,b int) (c int) {
  8. c = a + b
  9. return
  10. }
  11.  
  12.  
  13. func calc(a,b int) (@H_403_8@sum int,@H_403_8@avg int) {
  14. @H_403_8@sum = a + b
  15. @H_403_8@avg = (a +b)/2
  16. return
  17. }
  18.  
  19.  
  20. func main() {
  21. var a int = 1
  22. var b int = 2
  23.  
  24. c := @H_403_8@add(a,b)
  25. fmt.Println(c)
  26.  
  27. @H_403_8@sum,_ := calc(a,b)
  28. fmt.Println(@H_403_8@sum)
  29.  
  30. sum1,avg1 := calc(a,b)
  31. ``
  32. mt.Println(sum1,avg1)
  33. }

输出如下:

  1. 3
  2. 3
  3. 3 1

可变参数

  1. package main
  2.  
  3. import("fmt"
  4.  
  5. )
  6.  
  7. func @H_403_8@add(a int,args ... int)(@H_403_8@result int) {
  8. @H_403_8@result = a
  9. for i:=0;i<@H_403_8@len(args);i++{
  10. @H_403_8@result += args[i]
  11. }
  12. return
  13. }
  14.  
  15. func main() {
  16. @H_403_8@sum := @H_403_8@add(1,2,3)
  17. fmt.Print(@H_403_8@sum)
  18.  
  19. }

输出如下:6

defer用途

  1. 函数返回时,执行defer语句。因此,可以用来做资源清理
  2. 多个defer语句,按先进后出的方式执行
  3. defer语句中的变量,在defer声明时就决定了
  1. package main
  2.  
  3. import("fmt"
  4.  
  5. )
  6.  
  7. func add(a int,b int) int{
  8. defer fmt.Println("defer method")
  9. return a + b
  10. }
  11.  
  12. func main() {
  13. defer fmt.Println("defer main1")
  14. defer fmt.Println("defer main2")
  15. sum := add(1,2)
  16. fmt.Print(sum,"\n")
  17.  
  18. defer fmt.Println("defer method after")
  19.  
  20. }

输出如下:

  1. defer method 3 defer method after defer main2 defer main1

匿名函数

  1. package main
  2.  
  3. import("fmt"
  4.  
  5. )
  6.  
  7. //匿名函数1
  8. var (
  9. result = func(a int,b int) int{
  10. return a + b
  11. }
  12. )
  13.  
  14. //非匿名函数
  15. func sum1(a int,b int)int {
  16. return a + b
  17. }
  18.  
  19. //匿名函数2
  20. func sum2(a int,b int) int {
  21. tempMethod := func(a int,b int) int {
  22. return a + b
  23. }
  24. return tempMethod(a,b)
  25. }
  26.  
  27.  
  28.  
  29. func sum3(a int,b int ) int {
  30. resultTemp := func(a int,b int )int {
  31. return a + b
  32. }(a,b)
  33. return resultTemp
  34. }
  35.  
  36. func main() {
  37.  
  38. sum := result(1,2)
  39. fmt.Println(sum)
  40.  
  41. method:=sum1
  42. fmt.Println(method(3,4))
  43.  
  44. fmt.Println(sum2(4,6))
  45.  
  46. fmt.Println(sum3(7,9))
  47. }

输出如下:

  1. 3
  2. 7
  3. 10
  4. 16

猜你在找的Go相关文章