简单了解Go语言中函数作为值以及函数闭包的使用

 更新时间:2015年10月30日 16:15:29   投稿:goldensun  
这篇文章主要介绍了简单了解Go语言中函数作为值以及函数闭包的使用,是golang入门学习中的基础知识,需要的朋友可以参考下

函数作为值

Go编程语言提供灵活性,以动态创建函数,并使用它们的值。在下面的例子中,我们已经与初始化函数定义的变量。此函数变量的目仅仅是为使用内置的Math.sqrt()函数。下面是一个例子:

复制代码 代码如下:

package main

import (
   "fmt"
   "math"
)

func main(){
   /* declare a function variable */
   getSquareRoot := func(x float64) float64 {
      return math.Sqrt(x)
   }

   /* use the function */
   fmt.Println(getSquareRoot(9))

}


当上述代码被编译和执行时,它产生了以下结果:

3

函数闭包
Go编程语言支持匿名函数其可以作为函数闭包。当我们要定义一个函数内联不传递任何名称,它可以使用匿名函数。在我们的例子中,我们创建了一个函数getSequence()将返回另一个函数。该函数的目的是关闭了上层函数的变量i 形成一个闭合。下面是一个例子:

复制代码 代码如下:

package main

import "fmt"

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
   return i 
   }
}

func main(){
   /* nextNumber is now a function with i as 0 */
   nextNumber := getSequence() 

   /* invoke nextNumber to increase i by 1 and return the same */
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
  
   /* create a new sequence and see the result, i is 0 again*/
   nextNumber1 := getSequence() 
   fmt.Println(nextNumber1())
   fmt.Println(nextNumber1())
}


当上述代码被编译和执行时,它产生了以下结果:

1
2
3
1
2

相关文章

  • Go Gin框架路由相关bug分析

    Go Gin框架路由相关bug分析

    这篇文章主要为大家介绍了Go Gin框架路由相关bug分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 一文带你了解Go语言中的单元测试

    一文带你了解Go语言中的单元测试

    写过单元测试的开发人员应该理解,单元测试最核心的价值是为了证明:为什么我写的代码是正确的?也就是从逻辑角度帮你检查你的代码。本文就来和大家详细聊聊Go语言中的单元测试,需要的可以参考一下
    2022-07-07
  • Go 自定义package包设置与导入操作

    Go 自定义package包设置与导入操作

    这篇文章主要介绍了Go 自定义package包设置与导入操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Golang指针的操作以及常用的指针函数

    Golang指针的操作以及常用的指针函数

    本文主要介绍了Golang指针的操作以及常用的指针函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Go语言反射reflect.Value实现方法的调用

    Go语言反射reflect.Value实现方法的调用

    本文主要介绍了Go语言反射reflect.Value实现方法的调用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Golang连接并操作PostgreSQL数据库基本操作

    Golang连接并操作PostgreSQL数据库基本操作

    PostgreSQL是常见的免费的大型关系型数据库,具有丰富的数据类型,也是软件项目常用的数据库之一,下面这篇文章主要给大家介绍了关于Golang连接并操作PostgreSQL数据库基本操作的相关资料,需要的朋友可以参考下
    2022-09-09
  • 浅谈Go语言并发机制

    浅谈Go语言并发机制

    这篇文章主要介绍了浅谈Go语言并发机制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Golang中tinyrpc框架的源码解读详解

    Golang中tinyrpc框架的源码解读详解

    tinyrpc是一个高性能的基于protocol buffer的rpc框架。项目代码非常少,很适合初学者进行golang的学习。本文将从源码的角度带大家了解tinyrpc框架的使用,需要的可以参考一下
    2023-01-01
  • golang中gin框架接入jwt使用token验证身份

    golang中gin框架接入jwt使用token验证身份

    本文主要介绍了golang中gin框架接入jwt使用token验证身份,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Go语言操作MySQL的知识总结

    Go语言操作MySQL的知识总结

    Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。本文介绍了Go语言操作MySQL的相关知识,感兴趣的可以了解一下
    2022-11-11

最新评论