La commande « go generate » est utilisée pour générer automatiquement un certain type de code avant la compilation ; elle est souvent utilisée pour générer automatiquement du code, et elle peut générer du code basé sur le code source avant que le code ne soit compilé. Lorsque la commande "go generate" est exécutée, elle analysera les fichiers de code source liés au package actuel, trouvera tous les commentaires spéciaux contenant "//go:generate", extraira et exécutera la commande suivant le commentaire spécial.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
Le langage Go fournit une série d'outils puissants. L'utilisation flexible de ces outils peut faciliter le développement de notre projet. L'ensemble d'outils comprend les éléments suivants.
bug start a bug report build compile packages and dependencies clean remove object files and cached files doc show documentation for package or symbol env print Go environment information fix update packages to use new APIs fmt gofmt (reformat) package sources generate generate Go files by processing source get add dependencies to current module and install them install compile and install packages and dependencies list list packages or modules mod module maintenance run compile and run Go program test test packages tool run specified go tool version print Go version vet report likely mistakes in packages
Le code source de l'outil se trouve dans $GOPATH/src/cmd/internal Cet article traite principalement de la génération de l'outil Go.
La commande go generate est une commande nouvellement ajoutée dans la version 1.4 du langage Go. Elle est souvent utilisée pour générer automatiquement du code. Elle peut générer du code basé sur le code source avant que le code ne soit compilé. . Lors de l'exécution de go generate, il analysera les fichiers de code source liés au package actuel, trouvera toutes les instructions de commentaire contenant "//go:generate", extraira et exécutera la commande après le commentaire, et la commande sera un programme exécutable. Le processus est similaire à l’appel et à l’exécution d’un script shell. Comment utiliser
Ce commentaire spécial doit être inclus dans le . allez au milieu du fichier de code source. Chaque fichier de code source peut contenir plusieurs commentaires spéciaux générés. go generate ne sera pas déclenché par des commandes telles que go build, go get, go test, etc., et doit être utilisé explicitement par le développeur. L'exécution de la commande est en série. Si une erreur se produit, les commandes suivantes ne seront pas exécutées.
Exemple d'utilisation//go:generate command argument...
$ go generate [-run regexp] [-n] [-v] [-x] [build flags] [file.go... | packages]
package mainimport "fmt"//go:generate echo GoGoGo!//go:generate go run main.go//go:generate echo $GOARCH $GOOS $GOFILE $GOLINE $GOPACKAGEfunc main() { fmt.Println("go rum main.go!")}
$ go generate GoGoGo!go rum main.go!amd64 darwin main.go 7 main
go get golang.org/x/tools/cmd/stringer
package painkillertype Pill intconst ( Placebo Pill = iota Aspirin Ibuprofen Paracetamol Acetaminophen = Paracetamol)
func (p Pill) String() string
func (p Pill) String() string { switch p { case Placebo: return "Placebo" case Aspirin: return "Aspirin" case Ibuprofen: return "Ibuprofen" case Paracetamol: // == Acetaminophen return "Paracetamol" } return fmt.Sprintf("Pill(%d)", p)}
//go:generate stringer -type=Pill
Ils utilisent les bibliothèques fournies par le compilateur Go, notamment go/ast pour définir des arbres de syntaxe abstraite, go/parser pour analyser les arbres de syntaxe abstraite, go/format pour analyser le formatage du code, go/token pour les balises lexicales Go, etc. . Analysez le fichier source et générez un nouveau code selon le modèle existant. Ce processus est similaire à l'utilisation de modèles pour générer des fichiers HTML dans les services Web.
【Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!