$30 off During Our Annual Pro Sale. View Details »

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

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

Ilya Kaznacheev

January 01, 2021
Tweet

More Decks by Ilya Kaznacheev

Other Decks in Programming

Transcript

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

    View Slide

  2. Ilya Kaznacheev
    Remote Backend SWE
    Основатель Golang Voronezh,
    SAP Community Voronezh
    Соавтор Z-Namespace podcast
    Организатор конференций и митапов
    Любитель кофе

    View Slide

  3. View Slide

  4. View Slide

  5. if err != nil {
    return fmt.Errorf("what is Go?")
    }

    View Slide

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

    View Slide

  7. Golang: история
    1992 - Plan9:
    - Alef (язык)
    - Acme (редактор)
    - кросс-компиляция
    Что там было:
    - каналы
    - конкурентность
    - интерфейсы
    - сборка мусора
    - дженерики

    View Slide

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

    View Slide

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

    View Slide

  10. распространение

    View Slide

  11. View Slide

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

    View Slide

  13. Golang: особенности
    - простой синтаксис
    - упрощенный ООП
    - garbage collector
    - no generics
    - быстрая компиляция
    - goroutines
    - micro frameworks
    - modules
    - кросс-компиляция

    View Slide

  14. чем плох

    View Slide

  15. Минусы: garbage collector

    View Slide

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

    View Slide

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

    View Slide

  18. чем
    хорош

    View Slide

  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)
    }

    View Slide

  20. Плюсы: garbage collector
    - код сильно упрощается
    - сложно ошибиться при работе с памятью
    - при этом есть много путей оптимизации

    View Slide

  21. Плюсы: no generics
    - мгновенная компиляция
    - простой рантайм
    - больше type-safety
    - код проще читать

    View Slide

  22. Плюсы: goroutines
    - 4Кб
    - просто использовать
    - просто коммуницировать

    View Slide

  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!")
    }

    View Slide

  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!")
    }

    View Slide

  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!")
    }

    View Slide

  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!")
    }

    View Slide

  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!")
    }

    View Slide

  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!")
    }

    View Slide

  29. > go run main.go
    Ivan
    Sudhir
    Maria
    hello!

    View Slide

  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.

    View Slide

  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

    View Slide

  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)

    View Slide

  33. применение

    View Slide

  34. View Slide

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

    View Slide

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

    View Slide

  37. View Slide

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

    View Slide

  39. ilyakaznacheev

    View Slide

  40. View Slide

  41. remote
    work
    remote
    life

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. View Slide