Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Golang: прошлое и будущее

Golang: прошлое и будущее

Cee15b0246090c00f7de03e0a976f3ed?s=128

Ilya Kaznacheev

January 01, 2021
Tweet

Transcript

  1. Golang: прошлое и будущее

  2. Ilya Kaznacheev Remote Backend SWE Основатель Golang Voronezh, SAP Community

    Voronezh Соавтор Z-Namespace podcast Организатор конференций и митапов Любитель кофе
  3. None
  4. None
  5. if err != nil { return fmt.Errorf("what is Go?") }

  6. история возникновения

  7. Golang: история 1992 - Plan9: - Alef (язык) - Acme

    (редактор) - кросс-компиляция Что там было: - каналы - конкурентность - интерфейсы - сборка мусора - дженерики
  8. Golang: история 1995 - Limbo: - планировщик - виртуальная машина

    - вытесняющие процессы - сборщик мусора - модули - дженерики (в конце)
  9. Golang: история 2009 - Golang: - сборщик мусора - виртуальная

    машина - вытесняющие процессы - модули - кросс-компиляция - конкурентная работа через green-thread (goroutine) - нет дженериков
  10. распространение

  11. None
  12. особенности языка

  13. Golang: особенности - простой синтаксис - упрощенный ООП - garbage

    collector - no generics - быстрая компиляция - goroutines - micro frameworks - modules - кросс-компиляция
  14. чем плох

  15. Минусы: garbage collector

  16. Минусы: no generics interface{}

  17. Минусы: много кода

  18. чем хорош

  19. Плюсы: простой синтаксис package main import ( "fmt" "net/http" "time"

    ) func greet(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World! %s", time.Now()) } func main() { http.HandleFunc("/", greet) http.ListenAndServe(":8080", nil) }
  20. Плюсы: garbage collector - код сильно упрощается - сложно ошибиться

    при работе с памятью - при этом есть много путей оптимизации
  21. Плюсы: no generics - мгновенная компиляция - простой рантайм -

    больше type-safety - код проще читать
  22. Плюсы: goroutines - 4Кб - просто использовать - просто коммуницировать

  23. func main() { guests := []string{"Ivan", "Maria", "Sudhir"} wg :=

    &sync.WaitGroup{} for i := range guests { wg.Add(1) go func(name string) { fmt.Println(name) wg.Done() }(guests[i]) } wg.Wait() fmt.Println("hello!") }
  24. func main() { guests := []string{"Ivan", "Maria", "Sudhir"} wg :=

    &sync.WaitGroup{} for i := range guests { wg.Add(1) go func(name string) { fmt.Println(name) wg.Done() }(guests[i]) } wg.Wait() fmt.Println("hello!") }
  25. func main() { guests := []string{"Ivan", "Maria", "Sudhir"} wg :=

    &sync.WaitGroup{} for i := range guests { wg.Add(1) go func(name string) { fmt.Println(name) wg.Done() }(guests[i]) } wg.Wait() fmt.Println("hello!") }
  26. func main() { guests := []string{"Ivan", "Maria", "Sudhir"} wg :=

    &sync.WaitGroup{} for i := range guests { wg.Add(1) go func(name string) { fmt.Println(name) wg.Done() }(guests[i]) } wg.Wait() fmt.Println("hello!") }
  27. func main() { guests := []string{"Ivan", "Maria", "Sudhir"} wg :=

    &sync.WaitGroup{} for i := range guests { wg.Add(1) go func(name string) { fmt.Println(name) wg.Done() }(guests[i]) } wg.Wait() fmt.Println("hello!") }
  28. func main() { guests := []string{"Ivan", "Maria", "Sudhir"} wg :=

    &sync.WaitGroup{} for i := range guests { wg.Add(1) go func(name string) { fmt.Println(name) wg.Done() }(guests[i]) } wg.Wait() fmt.Println("hello!") }
  29. > go run main.go Ivan Sudhir Maria hello!

  30. Плюсы: кросс-компиляция ($GOOS+$GOARCH) The Go compilers support the following instruction

    sets: • amd64, 386 ◦ The x86 instruction set, 64- and 32-bit. • arm64, arm ◦ The ARM instruction set, 64-bit (AArch64) and 32-bit. • mips64, mips64le, mips, mipsle ◦ The MIPS instruction set, big- and little-endian, 64- and 32-bit. • ppc64, ppc64le ◦ The 64-bit PowerPC instruction set, big- and little-endian. • riscv64 ◦ The 64-bit RISC-V instruction set. • s390x ◦ The IBM z/Architecture. • wasm ◦ WebAssembly.
  31. Плюсы: модули > go get github.com/gorilla/mux import "github.com/gorilla/mux" module github.com/ilyakaznacheev/example

    go 1.15 require github.com/gorilla/mux v1.8.0
  32. Плюсы: micro frameworks import ( "net/http" "github.com/gorilla/mux" ) r :=

    mux.NewRouter() r.HandleFunc("/", handler) r.HandleFunc("/products", handler).Methods("POST") r.HandleFunc("/articles", handler).Methods("GET") r.HandleFunc("/articles/{id}", handler).Methods("GET", "PUT") http.Handle("/", r)
  33. применение

  34. None
  35. перспектива

  36. “Go has indeed become the language of cloud infrastructure“

  37. None
  38. полезные ссылки Rob Pike Interview - evrone.com/rob-pike-interview Go By Example

    - gobyexample.com
  39. ilyakaznacheev

  40. None
  41. remote work remote life

  42. как работать, живя удаленно?

  43. как жить, работая удаленно?

  44. поиск работы

  45. поиск общения

  46. правда и вымысел

  47. (не)утешительный итог

  48. None