

0 / 2 embers
0 / 3000 xp
click for more info
Complete a lesson to start your streak
click for more info
Difficulty: 5
click for more info
Not enough gems
Cost: 6 gems
1: Functions
incomplete
2: Multiple Parameters
incomplete
3: Unit Test Lessons
incomplete
4: Declaration Syntax
incomplete
5: Passing Variables by Value
incomplete
6: Ignoring Return Values
incomplete
7: Named Return Values
incomplete
8: The Benefits of Named Returns
incomplete
9: Explicit Returns
incomplete
10: Early Returns
incomplete
11: Functions As Values
incomplete
12: Anonymous Functions
incomplete
13: Defer
incomplete
14: Block Scope
incomplete
15: Processing Orders
incomplete
16: Closures
incomplete
17: Currying
incomplete
Back
ctrl+,
Next
ctrl+.
This lesson's interactive features are locked, please to keep using them
Function currying turns a function with multiple arguments into successive functions that each accept one argument.
For example, we can supply a shirt's unit price now and the quantity later:
func main() {
shirtCost := curriedCost(20)
fmt.Println(shirtCost(3))
// prints 60
fmt.Println(shirtCost(5))
// prints 100
}
func cost(unitPrice, quantity int) int {
return unitPrice * quantity
}
func curriedCost(unitPrice int) func(int) int {
return func(quantity int) int {
return cost(unitPrice, quantity)
}
}
curriedCost(20) returns a closure that remembers the unit price and waits for a quantity. Calling shirtCost(3) supplies that quantity and calls cost(20, 3).
You can also call the returned function immediately:
cost(20, 3) // returns 60
curriedCost(20)(3) // returns 60
Textio needs loggers that remember which server an error came from.
Complete the getLogger function. It accepts a server label (a string).