Aula 04
Análise de Código de Golang com Linters: go vet, golint, golangci-lint
Summary
Resumo da Apresentação sobre Ferramentas em Go
Introdução
- O apresentador discute duas ferramentas na linguagem Go: GoVet e GoLint.
- Também apresenta o GoLangCI, que é uma ferramenta que executa múltiplos linters simultaneamente.
GoVet
- GoVet é uma ferramenta que verifica o código em busca de problemas comuns:
- Identifica variáveis não utilizadas.
- Verifica se todos os argumentos de funções foram fornecidos.
- Exemplos práticos com o arquivo
Mostra.go
:- Problemas encontrados como falta de importação (
fmt
) e variáveis não utilizadas. - Sugestões para corrigir chamadas de função, como garantir que o número correto de argumentos seja passado.
- Problemas encontrados como falta de importação (
GoLint
- GoLint não faz parte do Go padrão, mas fornece sugestões de melhoria para o código.
- Sugestões incluem:
- Adição de comentários para funções exportadas.
- Eliminação de
else
desnecessários.
- GoLint ajuda a documentar e melhorar a legibilidade do código.
GoLangCI
- GoLangCI é uma ferramenta que roda vários linters de uma vez, facilitando a análise do código.
- O processo de instalação é semelhante ao GoLint.
- Roda não apenas GoVet e GoLint, mas também outros linters que podem fornecer sugestões adicionais.
Conclusão
- O apresentador revisa as principais ferramentas:
- GoVet para encontrar erros de sintaxe e problemas lógicos.
- GoLint para sugestões de melhoria.
- GoLangCI para uma execução mais simplificada de múltiplos linters.
- Finaliza convidando os espectadores a se inscreverem no canal e deixarem feedback.
Nota: A apresentação é voltada para desenvolvedores que buscam melhorar a qualidade do código escrito em Go e que desejam adotar boas práticas com o uso dessas ferramentas.
Video Transcript
Olá pessoal, na sala do falar de mais uns ferramentas aqui da linguagem Go.
Eu vou falar de GoVet e GoLint, falar de LinkedIn.
Então, LinkedIn é quando tem um programa que olha o seu código e vê se não tem algum problema.
Então, por exemplo, a gente vai usar o GoVet para ver se tem nenhum problema com variáveis que não são usadas,
ou você esqueceu de passar todos os argumentos para a função e tal e tal.
Também vou falar do GoLint para poder receber sugestões para melhorar o código.
Não necessariamente precisa fazer para o código rodar, mas seria melhoria.
Vamos terminar com um programa bem legal chamado GoLangCI, traço LinkedIn que roda todos esses LinkedIn ao mesmo tempo.
Vários LinkedIn.
Então, vamos começar aqui. Eu tenho esse código, a Mostra.go, nessa parte do LinkedIn, traço o Go que eu fiz.
Tem duas funções aqui. Eu só fiz o código aleatório para demonstrar como usar esses comandos.
Não é código que tem significado, né?
É só para demonstrar mesmo os erros para consertar no GoVet e as sugestões que o GoLint vai nos dar.
Primeiro, vamos ver GoVet, né?
Vou falar Go, espaço, v, e, te.
Passa o nome do arquivo, a Mostra.go.
E já de cara, ele me diz que teve problema dos argumentos aqui.
VET, a Mostra.go, coluna 2.
Eu estou usando FMT, está dizendo que o nome não foi declarado, undeclared name.
Isso significa que a gente esqueceu de importar, então vou lá em cima e vou dizer import.
Abre aspas duplas FMT.
Vou rodar o GoVet, a Mostra.go de novo. Agora tem outro problema.
A Mostra.go, linha 15, coluna 6, n123n, que é o nome da variável, foi declarado, mas não foi usado.
Então essa variável que eu fiz, n123n, e eu atribui um valor, mas eu nunca usei essa variável.
Esse é mais um problema. Você pode, neste caso, remover a variável.
Como não está usado.
Da GoVet de novo, agora está falando na linha 16, coluna 2, printf, que eu coloquei 2 placeholders,
percentual D por cento D, duas vezes, então a gente espera que a gente ponha, depois da vígula, 2 argumentos.
Está dizendo que corretamente que printf por cento D, leia argumento número 2, mas a chamada só teve um argumento.
Eu esqueci do segundo percentual D, que é poder botar qualquer coisa, sei lá, ou uma variável, ou um número, só para consertar isso.
Então GoVet a Mostra.go agora não tem mais problema.
Então esse é o GoVet para encontrar esses erros antes de você já compilar o código.
Então GoVet pode usar aí para ver se você não esqueceu certo número de argumentos,
se você não tem variáveis que não são usadas e assim por diante, você esqueceu do import e tal e tal.
Agora eu vou falar do GoLint, que é um pacote de terceiro, na verdade não, não faz parte do rumo do Go.
Esse GoLint vai nos dar sugestões para poder melhorar o código.
Depende de você se você quiser seguir ou não.
Muitas das sugestões valem a pena para corrigir o código e melhorar, outras você colhe, né, se realmente vale a pena ou não, se você concorda ou não.
São apenas sugestões, você não é obrigado.
Não vai dar problema na hora de concupilar.
Então vamos lá, vamos baixar isso.
Então o nome é GoLint e está no repositório lá no site do golang.org para poder eu instalar como se fosse globalmente, né,
para ele baixar e colocar o binário, arquivo binário na parte do GoPath-bin, que é o GoVin.
Você diz Go, install, golang.org, que é o caminho para esse módulo, para sush, barra x, barra lint, barra golint,
arroba, leite isso. Agora eu vou te mostrar esse comando se você não sabe.
Vou instalar para poder baixar e instalar o módulo, o caminho do módulo golang.org, barra x, barra lint, barra golint, aí arroba e a versão.
Latest significa a versão mais atual. Note que sdiretória aqui não tem arquivo Go.mode, então não tem.
Eu estou usando o Go na versão aqui 1.16, deixa eu mostrar aqui a nova tab, golversion.
Estala para você ver 1.16 para 5, tá? Que versões atteriores esse comportamento é diferente, então fica mudando as coisas,
então só para te dizer, versão 1.16 para 5 é assim que baixa o módulo e instala para poder ter o binário.
Ele vai baixar e se eu olhar agora ls, pasta pessoal, barra, na verdade o golpath, dola golpath, que eu já tenho, que é pasta pessoal, barra gol,
no meu caso, barra bin, que na verdade é o dola golbin que eu citei, eu tenho lá o golint que é o comando que eu quero rodar.
Então eu posso falar golint, amostra.go e ele vai mostrar sugestões, por exemplo, linha 6, a primeira, vamos ver a primeira, linha 6.
A função de fora que está exportada, porque eu usei a primeira letra da função é maiúscula,
significa que essa função é acessível de fora, outros módulos de fora podem ter acesso a essa função.
Deve ter comentário ou você não deve exportar, então ou você coloca o dminusco e não exporta, não disponibiliza essa função para outros de fora poder enxamar,
ou você adiciona esse comentário para poder aceitar essa sugestão de lint.
Comentário seria o que? Você adicionar um comentário para poder documentar essa função para aquelas pessoas que vão usar a função,
os invocadores da função que são de fora, para saber qual é a API, o que essa função faz.
Então se eu botar qualquer coisa no comentário, o que acontece?
Ele conserta o erro, mas ele diz outro, na linha 6 agora está dizendo, coluna 1.
Comentário na função exportada de fora tem que ser da forma de fora 3 pontos, elipse.
Então isso significa o que? Todo comentário, se você quiser fazer o comentário para documentar essa função em Go,
você tem que começar o comentário com o nome da função, exatamente igual o nome da função aqui.
Então tem que ser de fora e espaço e qualquer coisa que você quiser, ele vai consertar isso, certo?
Consertou aquele erro, então tem que ser mesmo nome da função copiada aqui no comentário, espaço e qualquer coisa que você quiser.
Isso é a sugestão para poder adicionar a documentação.
Agora vamos partir para o próximo, para a sugestão de lint.
Eu mostrei a Go, linha 10, if block, blockgif termina com return statement,
drop this else inoutend.
Então está dizendo que if esse blockgif termina com return,
drop this else inoutend.
Eu acho que a gente tira os else e o outro dentro é...
Tira a indatação para fora.
Vamos ver.
Se você tem um if com else,
essa pode tirar o else que é a mesma coisa, if,
com o return true aqui e o return false, seria a mesma coisa com else.
Então o else é opcional, então ele sujeira que você não conhece.
Essas foram as sugestões do lint, do golint.
Olha o que acontece se eu botasse espaço,
quebra de linha depois desse comentário da função de fora.
Agora ele reclama e mostra a sugestão que a função exportada de fora
tem que ter comentário ou não deve ser exportada.
A mesma coisa de antes, isso significa que quando você quebra a linha
ele não associa mais esse comentário, essa função,
então ele não sabe que tem comentário.
É bem particular as coisas.
Agora vou terminar esse vídeo com a demonstração do golangci traçolint.
Vou mostrar o site.
Esse aqui é o pacote.
github.com.golangci,
golangci traçolint.
Você vê aqui a descrição, fastlinters, runners for go.
Ele roda os linters, maneira rápida, a linguagem gol.
Então esse cara aqui vai rodar golvat,
vai rodar golint e vários outros que ele tem.
Para poder instalar, vamos ver aqui na minha máquina, o MyMachine.
Ele mostra vários comandos, mas o que importa,
você pode instalar através do Go install.
É só pegar o caminho aqui dele aqui, para você ver aqui.
Deixa eu te mostrar.
No terminal, deixa eu colocar.
Terminamos no gênero à esquerda, vou dizer o seguinte,
vou falar gol install e o caminho desse pacote,
deixa eu copiar aqui,
github.com.golangci,
golangci traçolint.com.golangci,
traçolint.com.golangci,
github e a versão, eu posso botar leiras para ser a última versão,
em vez de especificar o número.
Na hora de que eu não tenho nenhum arquivo go mod,
na diretora pessoal,
e eu estou usando a versão 1.16 do golangci.
Então esse comportamento vai funcionar aqui.
E é diferente as versões anteriores do gol install.
De detalhes, então cuidados se você estiver usando a versão diferente,
a do gol aí, pois isso aqui se não funciona,
da maneira desigada.
Se ele vai baixar, ele demora um pouquinho.
Então golangci é algo para facilitar a gente rodar vários comandos ao mesmo tempo.
Em vez de eu rodar golvert, golint e vários outros separadamente,
você pode rodar golangci-lint e ele vai rodar tudo de uma vez para você,
em vez de você ter que digitar cada comando separadamente.
Então ele baixou lá, se você dá uma olhada no LS,
no seu golpath-barrabin, no meu caso tem um golbin,
apareceu lá o comando executável do golangci-lint,
você pode dizer golangci-lint-run,
aí eu vou botar o nome do arquivo,
não esquece, a mostra é o Portugal.
Volta no código-fonte, você note que ele já...
ele rodou vários linters, não sei nem qual é,
especificamente quais, mas tem uns linters aí que ele mostrou um sugestão
dizendo que a função de fora não é usada.
Ele mostrou outra na linha 8, que eu devo usar b igual a 2,
em vez de esse fb igual a 2, return true, return false,
o que faz sentido, né?
Se b foi igual a 2, já é verdadeiro esse próprio,
só precisa retornar isso, em vez de fazer fb igual a 2,
retornar true, retornar false, fora.
Faz sentido essa segunda, eu não sei se a primeira faz sentido
essa sugestão aqui, é claro que eu fiz um pacote mesmo,
fiz esse outro pacote separado e quisesse mesmo que o pessoal
usasse essa função, talvez, eu não sei, se eu tirar a main e colocar
package outro, que será que acontece se eu rodar o linter.
Agora está dizendo que eu não estou usando o fmt, faz sentido.
Agora está dizendo só para fazer aquele return b igual a 2,
tem esse negócio de return true e return false, fora, faz sentido.
Pronto, então não reclamou do de fora, né?
Agora eu acho que faz sentido agora, porque eu tinha main,
ele pensou que era um arquivo, um módulo que tinha a função main
e ia rodar para o seu próprio comum comando,
em vez de uma espécie de biblioteca de terceiro ou api.
Agora faz sentido, se não tiver main, significa que alguém
vai importar esse módulo meu chamado que tem o pacote outro
e vai usar a função de fora, por isso que o erro lá de fora
não é utilizado, não deu mais, então faz sentido.
Então vamos recapitular tudo.
Aprendemos o dao gol vetch para poder rodar e encontrar erros,
por exemplo, você esquecer de passar o número corret de parâmetros
ou você tem uma variável que você não usou.
Aprende também o comando de terceiro,
dado hospedado no golang.org, do gol lint para poder
receber sugestões para poder melhorar o colho.
No nosso caso, a gente recebeu sugestão para comentar,
fazer o comentário de Godoc da nossa função que foi exportada.
Finalmente aprendemos a baixar esse outro programa de terceiro,
golang cei traçulinte, que ele roda vários lintes de uma vez.
Você note que ele pegou várias coisas que não tinha pegado antes
no gol vetch e no gol lint, é porque ele roda outras coisas também
em outros lintes.
Lintes é esse programinha que analisa o seu código da sua sugestão,
das sugestões, você deve fazer isso porque isso e tal.
Então a gente baixou, aprendeu a usar o gol install na versão 1.16.
Outras versões, abaixo, está outro comportamento.
Então gol install, caminho, arroba e o número da versão
ou latest, que se for a versão mais atual.
Isso no caso, se eu não tiver o arquivo gol.mode
no diretor presente, se tivesse, acho que não precisaria você
colocar a versão at, alguma coisa.
Então é só rodar o golang cei traçulinte,
espaço run, espaço nome do arquivo.
A gente vai olhar lá no pasta dos binários do gol,
que estão como no gol lint, o golang cei traçulinte está lá
e nós podemos rodar.
Então por essa aula é só, espero que tenham gostado,
não se esqueçam de deixar o seu like, por favor,
se inscrevam no canal, reajuda muito e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: