Comanda go generate este un mecanism standardizat în limbajul Go pentru a automatiza rularea instrumentelor externe care generează cod sursă Go înainte de compilare. Spre deosebire de sistemele complexe de macro-uri din C++ sau Rust, Go menține codul simplu și explicit: directiva //go:generate <comanda> este plasată ca un comentariu în fișierul sursă, iar la rularea go generate ./..., instrumentul scrie fișiere .go clare și versionabile în Git.
Generarea automată a metodei String() pentru enumerări cu stringer
package main
import "fmt"
// 1. Directiva instruiește comanda să ruleze utilitarul 'stringer':
// (Atenție: nu adăugați niciun spațiu între // și go:generate!)
//go:generate go run golang.org/x/tools/cmd/stringer -type=StareComanda
type StareComanda int
const (
Plasata StareComanda = iota
InProcesare
Expediata
Livrata
Anulata
)
func main() {
stare := Expediata
// 'stringer' va genera automat fișierul 'starecomanda_string.go'
// care adaugă metoda String():
fmt.Printf("Starea curenta este: %s
", stare) // Afișează: "Expediata" (nu cifra 2!)
}
Rularea comenzii în întregul proiect
# Execută recursiv toate directivele go:generate din toate pachetele:
go generate ./...