Skip to content

Instantly share code, notes, and snippets.

@Met4tron
Last active January 3, 2024 17:36
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Met4tron/395a7380a9ccd6b8c97e2541d16f06b1 to your computer and use it in GitHub Desktop.
Save Met4tron/395a7380a9ccd6b8c97e2541d16f06b1 to your computer and use it in GitHub Desktop.
Golang - Q&A + FAQ

Motivos

  1. Porque aprender Golang e não Rust?
  2. Porque aprender Golang e não JS/TS?
  3. O quão custoso é a simplicidade do Golang?
  4. Quais os pontos negativos do Golang?

Mercado

  1. Quais os principais players/empresas que utilizam Golang no BR?
  2. Existem vagas mid/senior? Só vejo vaga SR+
  3. Existem vagas para Backend, sem que envolva infraOps?
  4. Há perspectiva de crescimento de demanda/vagas para Golang?

Idioms

  1. é preferivel utilizar http (standard) ou algum framework/router?
  2. injeção de dependencias via reflector ou instanciando tudo na mão? (Wire ou Dig)
  3. quais o padrões de códigos são comuns em Golang?
  4. caso tenha migrado para golang de uma linguagem POO, como foi a adaptação?

Padrões

  1. Como voce organizaria uma API REST modular com Golang?
  2. Quais arquiteturas são mais usadas em Golang?
  3. Quais motivos de não usar determinada Arquitetura em Golang?
  4. Quais são as principais libs usadas no dia a dia?
@Met4tron
Copy link
Author

Conhecimento

  1. Quais tópicos podem ser considerados avançados em Golang?
  2. Quais as principais diferenças entre JS <> Golang?
  3. Quais as principais diferenças entre Java <> Golang?

@daniloraisi
Copy link

Motivos

  1. Porque aprender Golang e não Rust?

Vindo do mundo JS/TS, a curva de aprendizado será menos traumática, por assim dizer.

Rust é uma linguagem “low-level” e apresenta muitas diferenças de linguagens como JS ou Go. Para citar algumas:

  • Ownership (cada valor tem um único “dono”)
  • Borrowing (permite o empréstimo de um valor para um determinado trecho do código)
  • Lifetimes (especifica por quanto tempo uma referência é válida)
  1. Porque aprender Golang e não JS/TS?

Nada impede de aprender ambas. Afinal, JS/TS ainda é a linguagem mais utilizada no front-end, então se quiser ser um dev full-stack, acaba tendo de aprender JS/TS também.

  1. O quão custoso é a simplicidade do Golang?

Custoso em qual sentido? Go tem algumas peculiaridades que você não encontra em outras linguagens, mas nada fora da curva.

  1. Quais os pontos negativos do Golang?

Talvez o ponto mais traumático para quem venha de JS/TS seja o fato de Go ser tipada estaticamente. TS também é, mas possui a maleabilidade do JS. Você pode ter estruturas dinâmicas em Go, mas não é o padrão adotado pela linguagem.

Mercado

  1. Quais os principais players/empresas que utilizam Golang no BR?

No BR, de cabeça, sei que a Meli utiliza.

  1. Existem vagas mid/senior? Só vejo vaga SR+

Esse é um bom ponto, no geral, empresas exigem um nível Senior+ para trabalhar com Go.

  1. Existem vagas para Backend, sem que envolva infraOps?

Sim, eu mesmo trabalho com Go fazendo APIs.

  1. Há perspectiva de crescimento de demanda/vagas para Golang?

Pelo que tenho acompanhado nas pesquisas realizadas por Stack Overflow e GitHub, há uma crescente na utilização.

PS: continuarei escrevendo minhas respostas depois.

@eminetto
Copy link

Motivos

  1. Porque aprender Golang e não Rust?

Eu não vejo Rust e Go como concorrentes. Go tem sido usado bastante em microsserviços e APIs, aplicações dentro de empresas. Já Rust tem sido usado mais para coisas "baixo nível", como IDEs (Zed), terminais (Warp) e até no kernel do Linux e do Windows. Eu faço uma analogia com Go substituindo aplicações que foram escritas em Java e Rust substituindo coisas que foram originalmente feitas em C/C++. Ou seja: estude os dois (é o que eu pretendo fazer)

  1. Porque aprender Golang e não JS/TS?

Com Go vc gera aplicações nativas para o sistema operacional que vai ser usado, o que resulta em uma ótima performance. Por ser uma linguagem compilada tem muita coisa que vc consegue detectar já na compilação, diferente de JS (não usei TS o suficiente para poder dizer o quão legal é).

  1. O quão custoso é a simplicidade do Golang?
    Eu não vejo custos nesse caso. Simplicidade é uma das melhores coisas da linguagem :)

  2. Quais os pontos negativos do Golang?
    Menos vagas do que outras linguagens mais antigas. Menos livros e materiais em portugues, apesar disso ter melhorado muito nos últimos anos.

Mercado

  1. Quais os principais players/empresas que utilizam Golang no BR?
    De cabeça eu lembro de Globo, PicPay, Transfeera, ContaAzul, LuizaLabs, Magalu Cloud, Resultados Digitais, Pismo. Neste link tem mais cases.

  2. Existem vagas mid/senior? Só vejo vaga SR+
    Eu tenho uma teoria quanto a isso: na maioria das vezes as empresas começam a usar Go quando estão enfrentando problemas de performance, concorrência, escalabilidade. Nestes cenários o normal é procurar pessoas que tem mais experiência, por isso tem mais vagas para senior+ do que outras linguagens como JS. A tendência é isso melhorar com o tempo, conforme mais empresas começam a adotar Go como sua linguagem principal.

  3. Existem vagas para Backend, sem que envolva infraOps?
    Sim, muitas empresas usam Go para desenvolver APIs e microsserviços.

  4. Há perspectiva de crescimento de demanda/vagas para Golang?
    Não tenho números para provar isso, mas tenho visto um aumento nas vagas. Um contra-ponto é que os salários tendem a ser maiores.

Idioms

  1. é preferivel utilizar http (standard) ou algum framework/router?
    A tendência da comunidade é usar ao máximo a stdlib, para garantir a compatibilidade com as futuras versões da linguagem. Eu gosto de libs pequenas, que adicionam algumas funcionalidades mas mantém a compatibilidade com a stdlib, como o Chi. Mas na versão 1.22 está prevista uma melhoria grande na lib http que vai tornar obsoleta várias libs de terceiros.

  2. injeção de dependencias via reflector ou instanciando tudo na mão? (Wire ou Dig)
    Eu prefiro usar o main.go como o local para definir e invocar as dependências, passando elas explicitamente para os serviços (ou como queira chamar) que vão usá-las. Explicito é sempre melhor que implícito. Isso torna mais fácil os testes também.

  3. quais o padrões de códigos são comuns em Golang?
    Esta doc tem muita coisa importante que é recomendado ser seguido. Algumas empresas tem criado padrões baseados neste, mas simplificado ou adaptado para suas realidades. É o que fizemos no PicPay

  4. caso tenha migrado para golang de uma linguagem POO, como foi a adaptação?
    Eu vim de PHP e as únicas coisas que eu estranhei no começo foi o tratamento de erros e a falta de herança. Mas logo entendi como funcionam e não consigo me ver usando outra coisa :)

Padrões

  1. Como voce organizaria uma API REST modular com Golang?
    Esta doc representa o que eu uso hoje para organizar um projeto em Go. Além disso, gravei um curso com um exemplo de API. Ele está um pouco antigo mas acredito que ainda seja válido (pretendo revisar esses videos em 2024)

  2. Quais arquiteturas são mais usadas em Golang?
    Acredito que sejam Clean Architecture e Hexagonal (ou ports/adapters)

  3. Quais motivos de não usar determinada Arquitetura em Golang?
    Não consigo pensar em uma boa resposta para essa :)

  4. Quais são as principais libs usadas no dia a dia?
    Complicado listar porque são muitos projetos diferentes. Minha recomendação é sempre procurar no Aweseme Go

@Met4tron
Copy link
Author

Met4tron commented Jan 3, 2024

Idioms

  1. Quando usar ponteiros? Somente em casos de alteração de valores por referencia?
  2. Como obrigar uma struct seguir uma interface?
  3. Como e quando usar Context?

Patterns

  1. Quais as diferenças de usar uma Mutex e Atomic Operations? https://pkg.go.dev/sync/atomic
  2. Logging estruturado é feito de que maneira? Usando algo do std (https://pkg.go.dev/golang.org/x/exp/slog) ou zap (https://github.com/uber-go/zap) e outros pacotes de terceiros.
  3. Quando emitir um panic ou fatal? Qual a diferença entre os dois?
  4. Como criar um graceful shutdown para uma API?

Database

  1. std lib oferece suporte a sql (https://pkg.go.dev/database/sql), seu uso é indicado? Caso não seja, há complementos para a std lib ou uma lib de terceiros?
  2. Em caso de utilizar um ORM, qual seria o indicado?
  3. Em caso de utilizar um Query Builder, qual seria o indicado?
  4. Quais ferramentas para migrations tem disponiveis em Golang?
  5. Temos sqlc (https://sqlc.dev/) para geração de types/queries fazendo uma introspecção da database afim de gerar os types/queries, é comum no mercado esse método?

ORM

https://gorm.io/

Migrations

https://github.com/amacneil/dbmate
https://github.com/pressly/goose

Cloud

  1. Como é o suporte nas principais nuvens, para o runtime?
    1.1 Existem sdk para Golang, com a maioria das funcionalidades e sendo bem mantidas?
    1.2 Functions tem suporte para Golang? AWS Já contém

Comunidade

  1. Quais os eventos voltados para Golang que temos no BR?
  2. Quais os eventos voltados para Golang que temos internacionalmente?
  3. Quais são as pessoas referencias em Golang nacionalmente?
  4. Quais são as pessoas referencias em Golang internalcionamente?

Estudos

  1. Quais livros voce indicaria como leitura obrigatória em Golang?
  2. Quais cursos/artigos voce indicaria como leitura obrigatória?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment