Automatizarea Generării de Cod Sursă cu Directiva go:generate în Go

Comanda go, module și teste Standard Go Toolchain

Ghid practic pentru directiva go:generate: integrarea în fluxul de lucru a utilitarelor de generare automată de cod (stringer pentru enumerări, mockery pentru interfețe de test, protoc pentru gRPC) printr-o singură comandă.

Sintaxă
//go:generate stringer -type=Pill | go generate ./...

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 ./...