Ce face go fmt
go fmt rulează gofmt -l -w pe fișierele pachetelor date: le rescrie în formatul standard și afișează numele fișierelor modificate. În Go nu se discută stilul de formatare: tot codul arată la fel, iar editoarele rulează formatarea automat la salvare.
gofmt folosește taburi pentru indentare, aliniază comentariile și câmpurile din struct-uri, pune spațiile în jurul operatorilor și sortează importurile din fiecare grup. Nu schimbă numele și nici logica programului. goimports (unealtă separată) face același lucru și, în plus, adaugă sau șterge importurile.
Parametri
| Parametru | Descriere |
|---|---|
-l |
Listează fișierele care nu sunt formatate (fără să le modifice). |
-d |
Afișează diferențele. |
-w |
Scrie rezultatul în fișier. |
-s |
Simplifică și codul (de exemplu s[a:len(s)] devine s[a:]). |
Exemple
Exemplul 1: Înainte și după go fmt
Fișierul urat/main.go scris neîngrijit; go fmt îl afișează pentru că l-a modificat.
cat urat/main.go
go fmt ./urat
cat urat/main.go
Rezultat în terminal
package main
import "fmt"
func main(){
x:=1
if x>0{fmt.Println( "da" )}
}
urat/main.go
package main
import "fmt"
func main() {
x := 1
if x > 0 {
fmt.Println("da")
}
}
Exemplul 2: Verificare în CI
Dacă gofmt -l listează ceva, scriptul iese cu eroare.
test -z "$(gofmt -l .)" || { gofmt -l .; exit 1; }
Rezultat în terminal
preturi/preturi.go
Greșeli frecvente
- Formatarea manuală cu spații în loc de taburi:
gofmto va schimba oricum. go fmtpe un fișier cu erori de sintaxă: nu formatează și afișează eroarea (expected ...).