package main import "fmt" func main() { // nums := []int{1, 2, 3, 4, 5} // sum(1, 2, 3) // sum(nums...) foo1() } // не фиксированное количество параметров func sum(in ...int) (result int) { fmt.Printf("in := %#v \n", in) for _, val := range in { result += val } return } func soNothing() { fmt.Println("i'm regular function") } func foo1() { func(in string) { fmt.Println("anaon func out:", in) }("nobody") printer := func(in string) { fmt.Println("printer outs:", in) } // printer("as variable") // определяем тип функции type strFuncType func(string) worker := func(callback strFuncType) { callback("as callback") } worker(printer) // функция возвращает замыкание prefixer := func(prefix string) strFuncType { return func(in string) { fmt.Printf("[%s] %s", prefix, in) } } successLogger := prefixer("SUCCESS") successLogger("expecred behaviour") }