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

Jefferson Otoni Lima

December 18, 2020
Tweet

More Decks by Jefferson Otoni Lima

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. @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

    View full-size slide

  6. ancestrais
    [ancestrais] (https://golang.org/doc/faq#ancestors)
    @jeffotoni

    View full-size slide

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

    View full-size slide

  8. paradigmas
    @jeffotoni

    View full-size slide

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

    View full-size slide

  10. Cenário Web
    @jeffotoni

    View full-size slide

  11. Evolução HTTP
    @jeffotoni

    View full-size slide

  12. @jeffotoni
    cénario web

    View full-size slide

  13. @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

    View full-size slide

  14. Por que Go?
    [origens] (https://golang.org/doc/faq#history)
    @jeffotoni

    View full-size slide

  15. novo cenário surgindo
    @jeffotoni
    cluster massivo
    CPU multicores
    2009 - Web
    sistemas de redes
    serviços em clouds

    View full-size slide

  16. @jeffotoni
    E Agora ?

    View full-size slide

  17. “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)

    View full-size slide

  18. @jeffotoni
    10/11/2009
    [release](https://golang.org/doc/devel/pre_go1.html)

    View full-size slide

  19. 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

    View full-size slide

  20. quebra paradigmas
    @jeffotoni

    View full-size slide

  21. @jeffotoni
    96% linguagens
    interpretadas
    langs interpretadas
    langs compiladas
    2007 - Web

    View full-size slide

  22. 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

    View full-size slide

  23. Por que do sucesso?
    @jeffotoni

    View full-size slide

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

    View full-size slide

  25. 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

    View full-size slide

  26. Doc
    [doc golang] (https://golang.org/doc)
    @jeffotoni

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. Qual framework usar?
    @jeffotoni

    View full-size slide

  32. Lib nativa e externa
    @jeffotoni
    net/http => lib nativa
    Fasthttp => lib externa
    2020 web

    View full-size slide

  33. frameworks web vs nativo
    @jeffotoni
    fiber
    gin
    chi
    buffalo
    echo
    go-kit
    2020 - web
    lib nativa

    View full-size slide

  34. Routes webs vs nativo
    @jeffotoni
    gorilla/mux
    Belt
    Bone
    FastRoute
    Lib nativa
    Alien
    2009 - web

    View full-size slide

  35. Retrocompatibilidade
    @jeffotoni

    View full-size slide

  36. Qual ORM usar?
    @jeffotoni

    View full-size slide

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

    View full-size slide

  38. Services Web
    @jeffotoni

    View full-size slide

  39. Services web
    @jeffotoni
    grpc
    rpc
    2020 - web
    rest
    soap
    graphQL

    View full-size slide

  40. @jeffotoni
    mercado de trabalho

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  44. @jeffotoni
    Sublime

    View full-size slide

  45. @jeffotoni
    nvim

    View full-size slide

  46. @jeffotoni
    VsCode

    View full-size slide

  47. @jeffotoni
    Goland

    View full-size slide

  48. @jeffotoni
    Onde é mais utilizado

    View full-size slide

  49. @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

    View full-size slide

  50. @jeffotoni
    66%
    45%
    42%
    38%
    37%
    14%
    12%
    9%
    9%
    8%
    6%
    5%
    5%
    5%
    4%

    View full-size slide

  51. @jeffotoni
    Por que usar Go?

    View full-size slide

  52. @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

    View full-size slide

  53. @jeffotoni
    DevOps
    [DevOps Bootcamp] (devopsbootcamp.net)

    View full-size slide

  54. Docker não morreu!
    @jeffotoni

    View full-size slide

  55. @jeffotoni
    Pontos fortes

    View full-size slide

  56. @jeffotoni
    simplicidade
    legibilidade
    produtividade
    3 Pilares

    View full-size slide

  57. @jeffotoni
    Característica
    Tipagem
    estática
    Retrocompa-
    tibilidade
    Paradigma
    concorrente
    Multi
    Plataformas
    Compilada
    *estaticamente

    View full-size slide

  58. @jeffotoni
    Compilada
    $ go build

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  63. @jeffotoni
    concorrência
    != paralelismo

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  67. @jeffotoni
    Arquiteturas

    View full-size slide

  68. @jeffotoni
    microservices

    View full-size slide

  69. @jeffotoni
    Go Go Goc
    o
    mongo rethinkDB postgresql

    View full-size slide

  70. @jeffotoni
    service service service
    service service service
    service service service
    kubeMQ, redpanda, Kafka, nginx, traefik etc.

    View full-size slide

  71. (Representational State Transfer)
    rEST
    @jeffotoni

    View full-size slide

  72. /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

    View full-size slide

  73. @jeffotoni
    Pub/Sub
    RabbitMQ
    SQS
    KubeMQ
    Queues

    View full-size slide

  74. @jeffotoni
    Serverless

    View full-size slide

  75. type Serverless struct { Web *Event}

    View full-size slide

  76. 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/

    View full-size slide