首页 > 其他分享 >爱上开源之golang入门至实战第四章函数(Func)(八)

爱上开源之golang入门至实战第四章函数(Func)(八)

时间:2022-10-19 22:31:19浏览次数:62  
标签:return Func int sum golang 开源 func 返回值 函数


爱上开源之golang入门至实战第四章函数(Func)(八)

4.4.8 函数作为返回值

在go语言里,func本质上是一个类型关键字。 使用func来进行声明,本质上就是什么了一个func的对象。 对象名为function_name, 这个对象的类型是func。作为一个数据类型的对象,函数当然可以放到切片里面,map里面,可以赋值给一个变量,可以作为参数传递,也可以作为函数值进行返回。 今天这个文章就来看看函数作为返回值的用法。

爱上开源之golang入门至实战第四章函数(Func)(八)_数据类型

先来看看一段代码

func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}

如上段代码,代码定义了函数名为adder的函数, 函数没有定义传入参数,但是定义了返回值,返回值是func(int) int, 即返回值是一个函数, 而且该函数定义一个传入参数,参数数据类型是整数型, 该函数还定义了一个返回值,返回值类型也是int,整数型类型; 为了便于代码阅读,具有更好的可读性;上面的代码可以可以改写成如下代码

代码如下

type add func(int) int

func adder() add {
sum := 0
return add(func(x int) int {
sum += x
return sum
})
}

或者

type add func(int) int

func adder() add {
sum := 0
return func(x int) int {
sum += x
return sum
}
}

首先 通过 type add func(int) int 把返回的函数定义成一个 自定义类型。

然后将这个数据类型,作为返回值返回;

在函数作为返回值的代码实现中,上面的代码演示了2种形式的方式

return add(func(x int) int {
sum += x
return sum
})

把add作为数据类型,通过cast进行转换,获知直接用匿名函数的方式进行返回

return func(x int) int {
sum += x
return sum
}

下面我们通过一个代码样例,来看看作为函数返回值的函数对象,如何使用;

代码如下

func TestAnonymous4(t *testing.T) {

pos, neg := adder(), adder()

for i := 0; i < 10; i++ {
fmt.Println(
pos(i),
neg(-1*i),
)
}
}

===== OUTPUT =====
=== RUN TestAnonymous4
0 0
1 -1
3 -3
6 -6
10 -10
15 -15
21 -21
28 -28
36 -36
45 -45
--- PASS: TestAnonymous4 (0.00s)

这里的代码特别注意的是,对函数其中的变量sum的作用域; 可以看到pos, neg是两个不同的对象,但是他们的对象类型都是Add函数类型; 所以这两个函数中的sum变量,都在各自的作用域里,相互之间不会影响。

爱上开源之golang入门至实战第四章函数(Func)(八)_golang_02

爱上开源之golang入门至实战第四章函数(Func)(八)_golang_03

标签:return,Func,int,sum,golang,开源,func,返回值,函数
From: https://blog.51cto.com/u_9748604/5776892

相关文章

  • 实验5:开源控制器实践——POX
    一、基础要求  ——搭建拓扑,并用tcpdump验证Hub和Switch模块1.Hub模块2.L2-Leaning模块h1pingh2时h3抓不到相关报文同理,h2也抓不到h1pingh3的报文......
  • 实验5:开源控制器实践——POX
    一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运用POX控制器编写自定义网络......
  • 实验五_开源控制器实践——pox
    (一)基本要求搭建下图所示SDN拓扑,协议使用OpenFlow1.0,控制器使用部署于本地的POX(默认监听6633端口)生成拓扑sudomn--topo=single,3--mac--controller=remote,ip=127......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验5:开源控制器实践——POX
    一、实验目的1、能够理解POX控制器的工作原理;2、通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;3、能够运用POX控制器编写自......
  • 实验5:开源控制器实践——POX
    一、实验目的1.能够理解POX控制器的工作原理;2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;3.能够运用POX控制器编写自定......
  • 实验4:开源控制器实践——OpenDaylight
    实验4:开源控制器实践——OpenDaylight一、实验目的能够独立完成OpenDaylight控制器的安装配置;能够使用Postman工具调用OpenDaylightAPI接口下发流表。二、实验环境......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验5:开源控制器实践——POX
    实验要求(一)基本要求h1pingh2的tcpdump抓包结果h1pingh3的tcpdump抓包结果L2_learning模块代码流程图二)进阶要求重新搭建(一)的拓扑,此时交换机内无流表规则,拓扑......