Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
package main import "fmt" // Higher-order function: takes a function as an argument func apply(nums []int, fn func(int) int) []int { out := make([]int, len(nums)) for i, n := range nums { out[i] = fn(n) } return out } // Factory function returning a closure func makeAdder(x int) func(int) int { return func(y int) int { return x + y } } // Closure capturing a mutable counter func counter() (increment func(), get func() int) { n := 0 increment = func() { n++ } get = func() int { return n } return } func main() { double := func(n int) int { return n * 2 } nums := []int{1, 2, 3, 4, 5} fmt.Println("doubled:", apply(nums, double)) fmt.Println("squared:", apply(nums, func(n int) int { return n * n })) add5 := makeAdder(5) fmt.Println("add5(3) =", add5(3)) fmt.Println("add5(7) =", add5(7)) inc, get := counter() inc(); inc(); inc() fmt.Println("counter:", get()) // 3 // IIFE result := func(a, b int) int { return a + b }(10, 20) fmt.Println("IIFE result:", result) }
Result
Open