go fmt în Go

Formatează automat codul Go în stilul standard (gofmt): indentare, spații, alinieri și ordinea importurilor.

Sintaxă
go fmt ./...
gofmt -l .        # doar listează fișierele neformatate
gofmt -d main.go  # arată diferențele
gofmt -w main.go  # rescrie fișierul

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: gofmt o va schimba oricum.
  • go fmt pe un fișier cu erori de sintaxă: nu formatează și afișează eroarea (expected ...).

Comenzi înrudite

  • go vet: Analizează codul și semnalează greșeli probabile pe care compilatorul le acceptă: formate Printf greșite, copieri de mutex etc.
  • go build: Compilează pachetele și, pentru pachetul main, creează un executabil de sine stătător.