Go函数式编程

文章介绍了Go语言中的函数式编程特性,包括函数作为一等公民,可以作为参数、返回值。讨论了高阶函数的概念,展示了如何使用回调函数和匿名函数。此外,还详细解释了闭包的概念,以及如何利用闭包实现斐波那契数列的功能。
摘要由CSDN通过智能技术生成

Go函数式编程

  • 函数是一等公民:参数,变量,返回值都可以是函数

  • 高阶函数:可以将一个函数作为另外一个函数的参数。

    f1()
    f2(f1)
    f1函数作为f2函数的参数
    f2函数,叫做高阶函数,接收了另外一个函数作为参数的函数
    f1函数,叫做回调函数,作为另外一个函数的参数
    
    package main
    
    import "fmt"
    
    // 回调函数
    func main() {
    	// 函数调用
    	r1 := add(1, 2)
    	fmt.Println(r1)
    	// 高阶函数调用
    	r2 := oper(1, 2, add)
    	fmt.Println(r2)
    	r3 := oper(1, 2, sub)
    	fmt.Println(r3)
    	// 匿名函数
    	fun1 := func(a, b int) int {
    		return a * b
    	}
    	r4 := oper(1, 2, fun1) // 调用匿名函数 *
    	fmt.Println(r4)
    	// 能够直接传递匿名函数
    	r5 := oper(1, 2, func(a int, b int) int {
    		if b == 0 {
    			fmt.Println("除数不能为0")
    			return 0
    		}
    		return a / b
    	})
    	fmt.Println(r5)
    }
    
    // 运算 (运算的数字,运算操作)
    // 高阶函数,参数是接收另外一个函数
    func oper(a, b int, fun func(int, int) int) int {
    	fmt.Println(a, b, fun)
    	r := fun(a, b)
    	return r
    }
    
    func add(a, b int) int {
    	return a + b
    }
    func sub(a, b int) int {
    	return a - b
    }
    

Go语言中函数的本质也是一种数据类型

闭包

一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量

并且该外层函数的返回值就是这个内层函数。

这个内层函数和外层函数的局部变量,统称为闭包结构。

局部变量的生命周期就会发生改变,正常的局部变量会随着函数的调

用而创建,随着函数的结束而销毁

但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还在继续使用

func incre() func() int { //外层函数
	//定义一个局部变量
	i := 0
	//在外层函数的内部定义一个匿名函数,给变量自增并返回
	fun := func() int {
		i++
		return i
	}
	return fun
}

e.g.用闭包实现斐波那契数

package main

import "fmt"

// 闭包实现斐波那契数
func main() {
	f := fbnq()
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println("----------------")
	f1 := fbnq() //再次调用,a,b从0,1开始
	fmt.Println(f1())
	fmt.Println(f1())
	fmt.Println(f()) //这里的并没有随着第二次创建就被销毁归,而是在内层函数继续调用着
	fmt.Println(f1())
	fmt.Println(f1())
	fmt.Println(f1())
}

func fbnq() func() int {
	a, b := 0, 1
	return func() int {
		a, b = b, a+b
		return a
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值