Skip to content

Instantly share code, notes, and snippets.

@gerep
Created May 15, 2022 09:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gerep/d452674917da2d13ccb2fd10f442e372 to your computer and use it in GitHub Desktop.
Save gerep/d452674917da2d13ccb2fd10f442e372 to your computer and use it in GitHub Desktop.
  • Goroutines. Uma das coisas que Go acabou sendo bem conhecido é a questão da facilidade em trabalhar com concorrência.

  • Channels Se quiser ir mais a fundo nesse ponto, fale sobre channels também, que é uma maneira incrível de fazer essas sub rotinas se comunicarem.

  • Servidor web Me lembro de alguns programadores da CloudWalk ficarem surpresos com isso. Você pode criar um servidor web simples e funcional para demonstrar que com Go é possível ter um servidor HTTP/TCP/UDP sem precisar de nada além da linguagem. E tudo somente com um binário.

É possível fazer tudo isso sem nenhuma dependência externa, uma das características que acho muito boa nessa linguagem (e provavelmente em muitas outras).

  • Gerar binários para OSes diferentes Você pode compilar o seu código Go para Windows, Linux e Mac sem dificuldade.

Rodando o comando go tool dist list você vai ter uma lista das distribuições suportadas. Você pode especificar o OS e arquitetura usando variáveis de ambiente durante a compilação, por exemplo:

$ GOOS=windows GOARCH=arm64 go build -o pura_magica

O compilador vai gerar o .exe com o nome pura_magica para arquitetura arm64.

  • Ferramentas A linguagem vem com um conjunto de ferramentas que é muito interessante e ajuda muito o desenvolvedor. Alguns exemplos: go vet: faz validação do seu código e encontra possíveis problemas (normalmente os editores, como o VSCode, já usam) go generate: gera código durante a compilação, normalmente é usado para automação go run -race: verifica possíveis "race conditions" no seu código, ajuda muito! pprof: é uma lib da linguagem que faz gera, graficamente, um perfil da sua aplicação em detalhes incríveis. Caso esteja com problema de consumo de memória, lentidação e etc, pprof é quem vai te apontar o problema.

  • Tratamento de erros Pra mim é um dos pontos forte da linguagem mas pra maioria é um saco:

if err != nil {
  fmt.Println("error calling database", err)
}

Eu acho muito bom ter o hábito de verificar todos os possíveis erros que as nossas chamadas podem retornar. Claro que esse não é o melhor modelo mas acho que força a criação do hábito para tratar os erros.

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