mirror of
https://github.com/bootdotdev/fcc-learn-golang-assets.git
synced 2025-12-14 01:01:16 +00:00
38 lines
1.2 KiB
Markdown
38 lines
1.2 KiB
Markdown
# Closures
|
|
|
|
A closure is a function that references variables from outside its own function body. The function may access and *assign* to the referenced variables.
|
|
|
|
In this example, the `concatter()` function returns a function that has reference to an *enclosed* `doc` value. Each successive call to `harryPotterAggregator` mutates that same `doc` variable.
|
|
|
|
```go
|
|
func concatter() func(string) string {
|
|
doc := ""
|
|
return func(word string) string {
|
|
doc += word + " "
|
|
return doc
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
harryPotterAggregator := concatter()
|
|
harryPotterAggregator("Mr.")
|
|
harryPotterAggregator("and")
|
|
harryPotterAggregator("Mrs.")
|
|
harryPotterAggregator("Dursley")
|
|
harryPotterAggregator("of")
|
|
harryPotterAggregator("number")
|
|
harryPotterAggregator("four,")
|
|
harryPotterAggregator("Privet")
|
|
|
|
fmt.Println(harryPotterAggregator("Drive"))
|
|
// Mr. and Mrs. Dursley of number four, Privet Drive
|
|
}
|
|
```
|
|
|
|
## Assignment
|
|
|
|
Keeping track of how many emails we send is mission-critical at Mailio. Complete the `adder()` function.
|
|
|
|
It should return a function that adds its input (an `int`) to an enclosed `sum` value, then return the new sum. In other words, it keeps a running total of the `sum` variable within a closure.
|
|
|