简单了解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语言net包rpc远程调用的使用示例

    go语言net包rpc远程调用的使用示例

    本篇文章主要介绍了go语言net包rpc远程调用的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 关于Golang中range指针数据的坑详解

    关于Golang中range指针数据的坑详解

    这篇文章主要给大家介绍了关于Golang中range指针数据的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • 解决panic: assignment to entry in nil map问题

    解决panic: assignment to entry in nil

    这篇文章主要介绍了解决panic: assignment to entry in nil map问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2008-01-01
  • Go语言中同一个package中函数互相调用为undefined的解决

    Go语言中同一个package中函数互相调用为undefined的解决

    这篇文章主要介绍了Go语言中同一个package中函数互相调用为undefined的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 使用Go语言编写一个NTP服务器的流程步骤

    使用Go语言编写一个NTP服务器的流程步骤

    NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,为了确保封闭局域网内多个服务器的时间同步,我们计划部署一个网络时间同步服务器(NTP服务器),本文给大家介绍了使用Go语言编写一个NTP服务器的流程步骤,需要的朋友可以参考下
    2024-11-11
  • go语言中函数与方法介绍

    go语言中函数与方法介绍

    这篇文章介绍了go语言中的函数与方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 记一次go语言使用time.Duration类型踩过的坑

    记一次go语言使用time.Duration类型踩过的坑

    本文主要介绍了记一次go语言使用time.Duration类型踩过的坑,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 一文带你了解Golang中interface的设计与实现

    一文带你了解Golang中interface的设计与实现

    本文就来详细说说为什么说 接口本质是一种自定义类型,以及这种自定义类型是如何构建起 go 的 interface 系统的,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-01-01
  • Go 语言简单实现Vigenere加密算法

    Go 语言简单实现Vigenere加密算法

    这篇文章主要介绍了Go语言简单实现Vigenere加密算法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • 解析Go 中的 rune 类型

    解析Go 中的 rune 类型

    rune类型是 Go 语言的一种特殊数字类型,Go 语言通过rune处理中文,支持国际化多语言,本文给大家介绍Go 中的 rune 类型,感兴趣的朋友一起看看吧
    2022-03-03

最新评论