Download our all in one automation tool for various social media websites.
A Function is called closure if it references variables from outside of its function body.
A function may access and assign to the referenced variable. A closure is bound the variable that is being referenced.
Program given below demonstrates a closure that references a variable named
sliceOfWords that is outside its function body.
// function being treated as return value
package main
import (
"fmt"
"strings"
)
// function that returns a closure
func wordList() func(string) string {
// closure will access this variable
var sliceOfWords []string
// return closure
return func(word string) string {
sliceOfWords = append(sliceOfWords, word)
return strings.Join(sliceOfWords, " ")
}
}
func main() {
// assign a new closure
closure:=wordList()
// pass new words to the closure and print the return value
fmt.Println(closure("apple"))
fmt.Println(closure("banana"))
fmt.Println(closure("cat"))
fmt.Println(closure("dog"))
}
Above program produces following output:
apple
apple banana
apple banana cat
apple banana cat dog
Whenever closure is called, new word that is passed to the closure is added to
its existing sliceOfWords. Closure joins all elements present in the
sliceOfWords and returns it as a string, this string is then printed to the
console using the fmt.Println function.