1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GoでClosure

Posted at

Function closures

A Tour of GoやってたらClosureという壁に当たったためメモ

行き詰まったところ

参考

クロージャって何?というのはこのサイトを見てなんとなく理解できた気がする。

猿でもわかるクロージャ超入門

Goで実装

上のサイトの問題を解いてみる

問題: 呼び出すたびに、1,2,3,...を返すような関数 f( )を定義せよ。

f();  //  1 
f();  //  2
f();  //  3

できたもの
https://github.com/depretiger/LearningClosure

LearningClosure.go
package main

import "fmt"

func adder() func() {
  a := 1
  return func() {
    fmt.Println(a)
    a++
  }
}

func main() {
  f := adder()
  f()
  f()
  f()
}

adder()がクロージャを作っている関数。戻り値を無名関数funcとしている。adder()の中でaを初期化していて、adder()が返す無名関数がaをインクリメントしている。

mainでは変数f をadder()で初期化している。これでf()を呼び出すたびにaが保持されたままになるので、1ずつ増えていく。

結局何に使うか

参考のサイトではjqueryで使ってたけど他にはどんな使い方するんだろう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?