Created
March 23, 2015 14:56
-
-
Save makeittotop/cb9f07d69f70f0d9a133 to your computer and use it in GitHub Desktop.
go closure example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // from gobyexample.com | |
| package main | |
| import "fmt" | |
| // This function `intSeq` returns another function, which | |
| // we define anonymously in the body of `intSeq`. The | |
| // returned function _closes over_ the variable `i` to | |
| // form a closure. | |
| func intSeq() func() int { | |
| i := 0 | |
| return func() int { | |
| i += 1 | |
| return i | |
| } | |
| } | |
| func main() { | |
| // We call `intSeq`, assigning the result (a function) | |
| // to `nextInt`. This function value captures its | |
| // own `i` value, which will be updated each time | |
| // we call `nextInt`. | |
| nextInt := intSeq() | |
| // See the effect of the closure by calling `nextInt` | |
| // a few times. | |
| fmt.Println(nextInt()) | |
| fmt.Println(nextInt()) | |
| fmt.Println(nextInt()) | |
| // To confirm that the state is unique to that | |
| // particular function, create and test a new one. | |
| newInts := intSeq() | |
| fmt.Println(newInts()) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment