firstclass.go 900 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package main
  2. import "fmt"
  3. // обычная функция
  4. func doNothing() {
  5. fmt.Println("i'm regular function")
  6. }
  7. func main() {
  8. // анонимная функция
  9. func(in string) {
  10. fmt.Println("anon func out:", in)
  11. }("nobody")
  12. // присванивание анонимной функции в переменную
  13. printer := func(in string) {
  14. fmt.Println("printer outs:", in)
  15. }
  16. printer("as variable")
  17. // определяем тип функции
  18. type strFuncType func(string)
  19. // функция принимает коллбек
  20. worker := func(callback strFuncType) {
  21. callback("as callback")
  22. }
  23. worker(printer)
  24. // функиция возвращает замыкание
  25. prefixer := func(prefix string) strFuncType {
  26. return func(in string) {
  27. fmt.Printf("[%s] %s\n", prefix, in)
  28. }
  29. }
  30. successLogger := prefixer("SUCCESS")
  31. successLogger("expected behaviour")
  32. }