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

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

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

Ilya Kaznacheev

January 01, 2021
Tweet

More Decks by Ilya Kaznacheev

Other Decks in Programming

Transcript

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

    Voronezh Соавтор Z-Namespace podcast Организатор конференций и митапов Любитель кофе
  2. Golang: история 1992 - Plan9: - Alef (язык) - Acme

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

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

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

    collector - no generics - быстрая компиляция - goroutines - micro frameworks - modules - кросс-компиляция
  6. Плюсы: простой синтаксис 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) }
  7. Плюсы: garbage collector - код сильно упрощается - сложно ошибиться

    при работе с памятью - при этом есть много путей оптимизации
  8. 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!") }
  9. 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!") }
  10. 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!") }
  11. 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!") }
  12. 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!") }
  13. 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!") }
  14. Плюсы: кросс-компиляция ($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.
  15. Плюсы: 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)