go语言学习之闭包函数

package main

import (
    "fmt"
)

// 匿名函数1
func intSeq() func() int{
     var arrInt = [10]int{1,2,3,4,5,6,7,8,9,10}
     i := -1
    return func() int{
        i += 1
        return arrInt[i]
    }
}

// 带参数匿名函数2
func intSeq2() func(index int) int{
     var arrInt = [10]int{0,1,2,3,4,5,6,7,8,9}
     i := -1
    return func(index int) int{
        i += 1
        return arrInt[index]
    }
}

 func testIntSeq(){
      nextInt := intSeq()
     fmt.Println(nextInt())
     fmt.Println(nextInt())
 }
 func testIntSeq2(){
      nextInt := intSeq2()
     fmt.Println(nextInt(2))
     fmt.Println(nextInt(5))
 }

func testQuestion(){
    var j int = 5
    a := func() (func()){
        var i int = 10
        return func() {
            fmt.Println(i, j)
        }
    }

    b := a()
    b()
}  

 func testQuestion2(){
      var j int = 5
     a := func() (func()){
          var i int = 10
          return func() {
             fmt.Println(i, j)
          }
      }()
     a()
 }

 func Question3() []func() {
      b := make([]func(), 3, 3)
      for i := 0; i < 3; i++ {
          b[i] = func() {
              fmt.Println(i)
          }
      }
       return b
 }
   // 闭包通过引用的方式使用外部函数的变量。
  // 上例中只调用了一次函数B,构成一个闭包,i 在外部函数B中定义,所以闭包维护该变量 i ,c[0]、c[1]、c[2]中的 i 都是闭包中 i 的引用。
   // 因此执行c:=Question3()后,i 的值已经变为3,故再调用c[0]()时的输出是3而不是0。
  func testQuestion3(){
  c := Question3()
  c[0]()
  c[1]()
  c[2]()
 }

 func Question4() []func() {
    b := make([]func(), 3, 3)
    for i := 0; i < 3; i++ {
        b[i] = (func(j int) func() {
            return func() {
                fmt.Println(j)
            }
        })(i)
    }
    return b
}
 // 通过嵌套匿名函数的方式解决了testQuestion3的问题
 func testQuestion4(){
  c := Question4()
  c[0]()
  c[1]()
  c[2]()
 }
 func main(){
     // 测试1匿名函数1
     testIntSeq();
     // 测试2带参数匿名函数
     testIntSeq2();
     // 测试3
     testQuestion();
     // 测试4
     testQuestion2();

      // 测试5
     testQuestion3();
     // 测试6
     testQuestion4();

 }

原文地址:https://www.cnblogs.com/xzlq/p/9951612.html

时间: 2024-10-24 18:57:26

go语言学习之闭包函数的相关文章

C语言学习笔记-7.函数

一.函数的使用 1.每个函数在使用之前必须先定义 例:void function();       //有分号 int main() {-} void add() {-}       //无分号 2.文件包含处理: #include <文件名>       在库函数头文件所在目录中查找(标准方式) #include "文件名"      先在当前工作目录中查找,若没有则使用标准方式 3.函数的调用 形参:定义一个函数时指定的参数 实参:调用一个函数时指定的参数 注:C语言规

C语言学习笔记(七) 函数指针

"函数指针"和"指针函数"是一对容易把人弄晕的概念,但我们只要把握好定语,倒也不难理解.这两个名词都是简称,"指针函数"是"返回值为指针的函数",而"函数指针"则是"指向函数的指针".这篇主要讲讲函数指针. 我们讲有int 指针,char指针,它们都是一个指针指向这个变量的实际地址.而C语言在编译函数的时候每个函数会有一个入口地址,当我们用一个指针指向这个入口地址,它就称为函数指针.有了

go语言学习 strings常用函数

strings包中的函数用法 参考链接http://studygolang.com/articles/88 1.strings.replace() 函数原型 func Replace(str1, old, str2, n int) string //old是str1中的字符串,用str2替换str1中的old,一共替换n个.如果n<0,则全部替换 fmt.Println(strings.Replace("tet tet tet", "e", "es&

[Go语言]从Docker源码学习Go——main函数

Go程序从main包下的main函数开始执行,当main执行结束后,程序退出. Docker的main函数在 docker/docker/docker.go package main //Import needed packages; import ( ... "github.com/docker/docker/api" ... ) //define const; const ( defaultCaFile = "ca.pem" defaultKeyFile = &

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

Swift 1.1语言第7章 函数和闭包

Swift 1.1语言第7章  函数和闭包 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护.为 了解决这个问题,人们提出了函数这一概念.使用函数可以将特定功能的代码封装,然后在很多的地方进行使用.本章将会讲解函数和闭包的相关内容.本文选自<Swift 1.1语言快速入门> 7.1  函数介绍 函数是执行特定任务的代码块.使用函数会给开发这带来很多的好处.以下总结了其中两点. 1.结构鲜明,便于理解 如果在一

swift学习笔记2——函数、闭包

阅读目录 函数 闭包 之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询用.详细可以参考the-swift-programming-language-in-chinese,或者苹果官方英文版文档 当前版本是swift2.2 函数 func sayHello(personName: String, alreadyGreeted: Bool) -> S

【C语言学习】C语言中的函数

代码中,函数是为了更好的实现模块化的程序设计.那么函数的本质是什么?函数中定义的变量(全局变量.局部变量.静态变量等)又是怎样存储的?为什么全局变量与局部变量的作用域和生命期不相同?只有更加深入的了解函数,才能解答这些问题! ★函数的本质 函数的本质是一段可执行的机器指令代码,函数名的本质是一个标号,表示函数代码的入口.该标号的值等于内存中存储函数代码的内存空间的首地址. ★变量 ●全局变量 全局变量也就是外部变量,定义在函数的外部.因此它不属于任何一个函数,只属于所在的源文件. ▲初始化 对于

R语言学习(4)-环境和函数

环境和函数 1.环境 使用new.env函数创建环境 > an_environment <- new.env() 向环境中分配变量与列表相同 > an_environment[["pythag"]] <- c(12,15,20,21) > an_environment$root <- polyroot(c(6,-5,1)) > assign("moonday",weekdays(as.Date("1969/07/2