Go-function-closures

提供:Dev Guides
移動先:案内検索

Go-関数の閉鎖

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