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

PRIMEIROS PASSOS EM GO

PRIMEIROS PASSOS EM GO

Esta apresentação é um overview uma introdução a linguagem de programação Go, apresentando um pouco desta linguagem fantástica e poderosa.
Fizemos uma linha do tempo, contando um pouco de sua história e sua trajetória de forma humorada e descontraída e não podia deixar de mostrar um pouco da história do sucesso que nosso mascote gopher 😍 faz.

Falamos um pouco dos paradigmas e o por que do designer da linguagem Go ter optado em quebrar diversos paradigmas ao propor o que conhecemos hoje na linguagem Go, nada mais e nada menos o que conhecemos em Engenharia de Software durante décadas ao resolver problemas usando Go a conversa será da forma Go ou jeito Go de fazer as coisas ❤️ e isto é fantástico.

Apresentamos um pouco das comunidades ao redor do universo Go e como são importantes para o sucesso da linguagem.

A apresentação foi feita ao vivo no link baixo:
https://www.youtube.com/user/jeffotoni

O repo com alguns exemplo feitos para apresentação
https://github.com/jeffotoni/first.steps.go

Um post para facilitar o entendimento sobre o assunto
https://jeffotoni.medium.com/primeiros-passos-em-go-e1e28b7ff5d3

02b3f64a1d67d061c3be08729322a90b?s=128

Jefferson Otoni Lima

December 18, 2020
Tweet

Transcript

  1. Jefferson Otoni @jeffotoni https://s3wf.com.br https://engdb.com.br

  2. None
  3. Iniciando [doc golang] (https://golang.org) @jeffotoni

  4. @jeffotoni Robert Griesemer Russ Cox Rob Pike Ken Thompson

  5. origens [origens] (https://golang.org/doc/faq#history) @jeffotoni

  6. @jeffotoni

  7. @jeffotoni 2009 Linux e Mac OS X x86 de 64

    bits, x86 de 32 bits e ARM de 32 bits FreeBSD, NetBSD e OpenBSD, Plan 9 x86 64 bits e 32 bits, e 32bits 2012 Solaris, Android e Plan 9 x86 de 64 bits, ARM de 32 bits e x86 de 64 bits 2014 PowerPC, Linux, IOS 64 bits, ARM de 64 bits, 32bits e 64bits 2015 2016 2017 2018 2019 MIPS, Android, LInux, Raspberry Pi, z Systems (S390x) , Linux, Plan 9 64 bits, x86 32bits, ARM 32bits MIPS, PowerPC, z System 32 bits, x86 64bits Windows 10, IoT Core, Raspberry Pi 3, AIX em PowerPC ARM 32 bits, 64bits RISC-V 64bits
  8. ancestrais [ancestrais] (https://golang.org/doc/faq#ancestors) @jeffotoni

  9. @jeffotoni C ancestrais Newsqueak Limbo Alef Pascal Modula Oberon Erlang

  10. paradigmas @jeffotoni

  11. conceitos ortogonais Concorrente @jeffotoni Imperativo paradigmas F(x) OOP

  12. Cenário Web @jeffotoni

  13. Evolução HTTP @jeffotoni

  14. @jeffotoni cénario web

  15. @jeffotoni LANGS CONCORRENTES Go/Golang 2009 Erlang 1998 Elixir 2012 Clojure

    2007 Occam 1983 Oberon 1986 CLOUDS Aws Amazon 2006 Google Cloud 2010 Windows Azure 2010 Web 2009
  16. Por que Go? [origens] (https://golang.org/doc/faq#history) @jeffotoni

  17. @jeffotoni

  18. @jeffotoni

  19. @jeffotoni

  20. @jeffotoni

  21. novo cenário surgindo @jeffotoni cluster massivo CPU multicores 2009 -

    Web sistemas de redes serviços em clouds
  22. @jeffotoni E Agora ?

  23. “Tentativa de combinar a facilidade de programação de uma linguagem

    interpretada dinâmica com a eficiência e segurança de uma linguagem compilada estaticamente.” Em 2007 nasceu a ideia @jeffotoni [origens] (https://golang.org/doc/faq#history)
  24. @jeffotoni 10/11/2009 [release](https://golang.org/doc/devel/pre_go1.html)

  25. @jeffotoni

  26. Lançamento Go @jeffotoni Não possui generics (em breve) Não possui

    OO 2009 - Web Não possui herança Não possui exceção (try-catch-finally) concorrete compilada GC Goroutines e não Threads
  27. quebra paradigmas @jeffotoni

  28. @jeffotoni

  29. @jeffotoni

  30. @jeffotoni 96% linguagens interpretadas langs interpretadas langs compiladas 2007 -

    Web
  31. Por que da ausência ? @jeffotoni construções lentas depêndencias não

    controladas custo de atualização versão enviesada duplicação de esforços Ineficiência de execução 2009 - web
  32. Por que do sucesso? @jeffotoni

  33. @jeffotoni Renée French [história do gopher](https://blog.golang.org/gopher)

  34. Telegram https://t.me/go_br https://t.me/go_bh https://t.me/golangcwb Slack https://gophers.slack.com (members >~45k) GopherCon Brasil

    2020 https://2020.gopherconbr.org Wiki Conferencias https://github.com/golang/go/wiki/Conferences Meetup https://www.meetup.com/go-belo-horizonte https://www.meetup.com/pt-BR/golangbr https://www.meetup.com/pt-BR/Women-Who-Go-Sampa https://www.meetup.com/pt-BR/Golang-Campinas/ https://www.meetup.com/pt-BR/golang-poa/ https://www.meetup.com/pt-BR/GolangCWB/ Comunidade @jeffotoni
  35. Doc [doc golang] (https://golang.org/doc) @jeffotoni

  36. @jeffotoni

  37. install [install] (https://golang.org/doc/install) @jeffotoni

  38. @jeffotoni

  39. tour [Tour] (https://tour.golang.org/welcome/1) @jeffotoni

  40. @jeffotoni

  41. effective [effective] (https://golang.org/doc/effective_go.html) @jeffotoni

  42. @jeffotoni

  43. Frequently ASked [effective] (https://golang.org/doc/faq) @jeffotoni

  44. @jeffotoni

  45. Qual framework usar? @jeffotoni

  46. Lib nativa e externa @jeffotoni net/http => lib nativa Fasthttp

    => lib externa 2020 web
  47. frameworks web vs nativo @jeffotoni fiber gin chi buffalo echo

    go-kit 2020 - web lib nativa
  48. Routes webs vs nativo @jeffotoni gorilla/mux Belt Bone FastRoute Lib

    nativa Alien 2009 - web
  49. Retrocompatibilidade @jeffotoni

  50. Qual ORM usar? @jeffotoni

  51. ORM web @jeffotoni xorm gorm 2009 - web ent/facebook gorp

  52. Services Web @jeffotoni

  53. Services web @jeffotoni grpc rpc 2020 - web rest soap

    graphQL
  54. @jeffotoni mercado de trabalho

  55. @jeffotoni

  56. @jeffotoni libs e awesome [effective] (https://github.com/avelino/awesome-go)

  57. @jeffotoni

  58. @jeffotoni lista de discussão [nuts] (https://groups.google.com/group/golang-nuts)

  59. Editor and IDEs [editores] (https://golang.org/doc/editors.html) @jeffotoni

  60. @jeffotoni Sublime

  61. @jeffotoni nvim

  62. @jeffotoni VsCode

  63. @jeffotoni Goland

  64. @jeffotoni Onde é mais utilizado

  65. @jeffotoni Utilizado em: API / RPC services (returning non-HTML) A

    runnable / Interactive program (CLI) Libraries or framewo rks Web services (returning HTML) Automation / Scripts (e.g., deployment, Configuration management) Agents and daemons (e.g., monitoring ) Data Processing (e.g., Pipelines, aggregation ) Desktop / GUI applications Games Mobile apps Other 73% 71% 63% 62% 30% 48% 46% 47% 38% 42% 45% 40% 32% 37% 5% 8% 4% 4% 2% 2% 2% 2% 2018 2019
  66. @jeffotoni 66% 45% 42% 38% 37% 14% 12% 9% 9%

    8% 6% 5% 5% 5% 4%
  67. @jeffotoni Por que usar Go?

  68. @jeffotoni

  69. @jeffotoni break default func interface select case defer go map

    struct chan else goto package switch const fallthrough if range type continue for import return var 25 keywords
  70. @jeffotoni DevOps [DevOps Bootcamp] (devopsbootcamp.net)

  71. None
  72. Docker não morreu! @jeffotoni

  73. @jeffotoni

  74. @jeffotoni

  75. @jeffotoni Pontos fortes

  76. @jeffotoni simplicidade legibilidade produtividade 3 Pilares

  77. @jeffotoni Característica Tipagem estática Retrocompa- tibilidade Paradigma concorrente Multi Plataformas

    Compilada *estaticamente
  78. @jeffotoni Compilada $ go build

  79. @jeffotoni Compilação estática e dinâmica $ ldd binary

  80. @jeffotoni Compilação cruzada $ GOARCH=386 GOOS=windows go build -o myapp.exe

    main.go
  81. @jeffotoni Concorrente [Concorrência] (https://divan.dev/posts/go_concurrency_visualize)

  82. @jeffotoni https://divan.dev/demos/workers Fan-Out

  83. @jeffotoni concorrência != paralelismo

  84. @jeffotoni pprof profilling https://blog.golang.org/pprof

  85. Ref: https://blog.golang.org/pprof

  86. @jeffotoni Lib test nativo https://golang.org/pkg/testing

  87. @jeffotoni

  88. @jeffotoni Arquiteturas

  89. @jeffotoni microservices

  90. @jeffotoni Go Go Goc o mongo rethinkDB postgresql

  91. @jeffotoni service service service service service service service service service

    kubeMQ, redpanda, Kafka, nginx, traefik etc.
  92. (Representational State Transfer) rEST @jeffotoni

  93. /auth POST /user GET /user/{uuid} GET /user/{uuid} DELETE /user/{uuid} PUT

    1M requests/s 50k requests/s 100k requests/s 60k requests/s 1k requests/s service 1 service 2 service 3 service 4 service 5 @jeffotoni
  94. @jeffotoni Pub/Sub RabbitMQ SQS KubeMQ Queues

  95. @jeffotoni Serverless

  96. type Serverless struct { Web *Event}

  97. Thanks := &Obrigado{...} Obrigado... github.com/jeffotoni instagram.com/jeffotoni https://t.me/devopsbh https://t.me/go_br https://t.me/awsbrasil linkedin.com/in/jeffotoni/