Golang Tools: Your code's best friends 🛠️
Ah, il meraviglioso mondo dei tool per Go! Se pensavi che scrivere codice fosse sufficiente, preparati a scoprire un universo di strumenti che renderanno il tuo codice più pulito di una cucina dopo una visita della suocera.
📝 Gofmt: Il parrucchiere del tuo codice
gofmt
è il tool di formattazione ufficiale di Go. Non solo formatta il codice, ma lo rende conforme alle convenzioni di stile della comunità Go. L’opzione -s
applica semplificazioni al codice, -l
elenca i file modificati, e -w
scrive le modifiche direttamente nei file.
Benefits:
- Elimina le discussioni sullo stile del codice nel team
- Garantisce consistenza in tutto il codebase
- Aumenta la leggibilità del codice
- Riduce il cognitive load durante il code review
1# Formatta tutti i file Go nella directory corrente e sottodirectory
2gofmt -s -l -w .
3
4# Formatta un file specifico
5gofmt -s -w main.go
6
7# Mostra le differenze senza modificare i file
8gofmt -d main.go
1// Prima
2type Person struct{
3 Name string
4 Age int
5}
6
7func (p Person)SayHello(){
8 fmt.Println("Hello!")
9}
10
11// Dopo gofmt
12type Person struct {
13 Name string
14 Age int
15}
16
17func (p Person) SayHello() {
18 fmt.Println("Hello!")
19}
🔍 Golangci-lint: Il detective perfezionista
golangci-lint è un meta-linter che combina decine di analizzatori statici in un unico strumento. Non solo trova errori, ma suggerisce anche miglioramenti per performance, sicurezza e manutenibilità del codice.
Benefits:
- Trova bug prima che raggiungano la produzione
- Migliora la qualità del codice attraverso best practices
- Riduce il technical debt
- Velocizza il processo di code review
1# Esegui tutti i linter abilitati
2golangci-lint run
3
4# Esegui linter specifici
5golangci-lint run --disable-all --enable=errcheck,gosimple
6
7# Analizza solo i file modificati rispetto al main
8golangci-lint run --new-from-rev=HEAD
1# .golangci.yml esempio
2linters:
3 enable:
4 - govet # analizza codice per errori comuni
5 - errcheck # verifica la gestione degli errori
6 - staticcheck # analizzatore statico avanzato
7 - gosimple # semplifica il codice
8 - dupl # trova codice duplicato
9 - goconst # trova costanti che potrebbero essere dichiarate
🐛 Go vet: Il veterinario del codice
go vet
è uno strumento di analisi statica che trova sottili errori che il compilatore potrebbe non rilevare. È particolarmente bravo a trovare errori nelle chiamate di funzione, nella costruzione di struct e nell’uso di Printf.
Benefits:
- Individua errori subdoli prima dell’esecuzione
- Migliora l’affidabilità del codice
- Riduce i bug in produzione
- Zero falsi positivi
1# Analizza il pacchetto corrente
2go vet
3
4# Analizza tutti i pacchetti nel progetto
5go vet ./...
6
7# Analizza un file specifico
8go vet main.go
1func esempio() {
2 var x string
3 fmt.Printf("%d", x) // go vet segnalerà questo errore di formato
4}
🔎 Revive: L’ispettore del codice
revive
è un linter veloce, configurabile e estensibile per Go. È come un ispettore che controlla che il tuo codice segua tutte le regole del “galateo della programmazione”.
Benefits:
- Più veloce e flessibile di golint
- Altamente configurabile con regole personalizzabili
- Supporta l’esclusione di file e directory
- Genera report in diversi formati (JSON, HTML, XML)
1# Installa revive
2go install github.com/mgechev/revive@latest
3
4# Esegui l'analisi base
5revive ./...
6
7# Usa una configurazione personalizzata
8revive -config config.toml ./...
1# revive.toml esempio
2ignoreGeneratedHeader = false
3severity = "warning"
4confidence = 0.8
5
6[rule.cyclomatic]
7 arguments = [15]
8[rule.function-length]
9 arguments = [50]
10[rule.var-naming]
11 arguments = [["ID", "URL"]]
🔒 Gosec: La guardia di sicurezza
gosec
è il bodyguard del tuo codice. Cerca vulnerabilità di sicurezza come un metal detector all’aeroporto.
Benefits:
- Identifica vulnerabilità di sicurezza critiche
- Previene attacchi comuni
- Applica best practices di sicurezza
- Riduce il rischio di data breaches
1# Analizza tutti i pacchetti nel progetto
2gosec ./...
3
4# Analizza un file specifico
5gosec main.go
1func insicuro() {
2 exec.Command("ls", os.Args[1]) // gosec avviserà del potenziale rischio di injection
3}
🎯 Trivy: Scanner delle dipendenze
trivy
è come un metal detector per le vulnerabilità nelle dipendenze. Perché anche i pacchetti che usi potrebbero nascondere sorprese.
Benefits:
- Scansiona vulnerabilità note nelle dipendenze
- Mantiene l’ambiente di produzione sicuro
- Fornisce report dettagliati
- Supporta multiple tecnologie
1# Scansiona la directory corrente per vulnerabilità
2trivy fs .
3
4# Scansiona un file specifico
5trivy fs main.go
1# Output esempio
2CRITICAL go:gin-gonic/gin:v1.7.0
3 → Gin before v1.7.1 allows remote attackers to exploit a vulnerability in...
🐳 Hadolint: Il critico d’arte dei dockerfile
hadolint
è il critico d’arte che giudica i tuoi Dockerfile. Perché anche i container meritano eleganza.
Benefits:
- Garantisce best practices nei Dockerfile
- Ottimizza le immagini container
- Riduce vulnerabilità di sicurezza
- Migliora la manutenibilità
1# Analizza un Dockerfile
2hadolint Dockerfile
3
4# Analizza un Dockerfile specifico
5hadolint -f json Dockerfile
1# Hadolint approva 👍
2FROM golang:1.21-alpine
3COPY . /app
4WORKDIR /app
5RUN go build -o main .
6CMD ["./main"]
🕵️ Trufflehog: Il cacciatore di segreti
trufflehog
è come un metal detector per segreti nel codice. Trova password, chiavi API e altri segreti che non dovrebbero essere nel repository.
Benefits:
- Previene la fuga di dati sensibili
- Automatizza la ricerca di credenziali esposte
- Supporta ricerca in Git history
- Riduce il rischio di compromissione delle credenziali
1# Scansiona l'intero repository per segreti
2trufflehog --regex --entropy=True .
3
4# Scansiona un file specifico
5trufflehog --regex --entropy=True main.go
1# Esempio di output
2Found possible AWS key in commit a1b2c3d4:
3 AWS_SECRET_KEY=AKIAIOSFODNN7EXAMPLE
📁 Ls-lint: Il guardiano della struttura
ls-lint
è un linter ultraveloce per la struttura dei file e delle directory. Garantisce che i nomi dei file e delle cartelle seguano le convenzioni del team.
Benefits:
- Mantiene una struttura del progetto coerente
- Previene confusione nella nomenclatura
- Velocizza la navigazione del codice
- Zero dipendenze e configurazione semplice
1# Installa ls-lint
2npm install -g @ls-lint/ls-lint
3
4# Esegui ls-lint
5ls-lint
1# .ls-lint.yml esempio
2ls:
3 .dir: kebab-case
4 .go: kebab-case
5 models:
6 .go: PascalCase
7 handlers:
8 .go: snake_case
9
10ignore:
11 - node_modules
12 - .git
💡 Conclusioni
Questi strumenti sono come una squadra di supereroi che proteggono il tuo codice da bug, vulnerabilità e formattazione discutibile. Usali regolarmente e il tuo codice ti ringrazierà (e anche i tuoi colleghi).
💪 Pro Tip: Integra questi tool nel tuo CI/CD pipeline. È come avere un team di revisori che non si lamenta mai delle ore di straordinario!