本文主要介绍 Go 语言的另一大编程特性—— 函数式编程 。函数式编程的基础特点为:
- 函数是一等公民,即 函数可以做为变量 。
- 纯函数,即函数内的操作不可影响到函数外。
Go 语言的函数式编程 无需遵循第二点 ,这一特性为 Go 语言的函数式编程带来了更大的灵活性。
1. 编程示例
接下来我们来分别展示用函数式编程和普通编程方式来实现一个累加器,即输出 1+2+3+…+100 的值。
普通方式实现:
func main() {
a := 0
for i := 1; i <= 100; i++ {
a = a + i
}
fmt.Println(a)
}
函数式编程实现:
package main
import (
"fmt"
)
type iAdder func(int) int
func adder() iAdder {
sum := 0
return func(v int) int {
sum += v
return sum
}
}
func main() {
a := adder()
var s int
for i := 1; i <= 100; i++ {
s = a(i)
}
fmt.Println(s)
}
- 第 7 行:定义函数类型自定义数据类型;
- 第 9~15 行:定义累加器函数;
- 第 18 行:定义变量 a,并将累加器函数作为值赋给变量 a;
- 第 20~22 行:累加 100 次。
执行结果:
两者比较,就是后者将整个 累加过程作为变量 放置在了循环以外,使得整个累加可以脱离循环之外。看起来就像是不断的对一个传入的常数进行加工,就像是 流水线的一个工具 。所以函数式编程在开发过程中经常会用在对 数据的长流程处理 。例如,录入身份证号时,要从身份证号中获取年龄,籍贯、性别等信息,就可以使用三个函数对身份证号进行顺序处理。这样写的好处就在于可以随时 增删其流程 。
2. 小结
Go语言的函数式编程比起传统函数式编程更加灵活,主要在于 不需要遵循纯函数原则 。Go语言的函数式编程主要应用在类似于流水线加工数据的场景,以便于随时 增删数据处理流程 。
本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。