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

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

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

Avatar for Ilya Kaznacheev

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)