go build exemple.goAvec l'exemple de code ci-après, on voit que la variable os.Args donne accès aux arguments de la ligne de commande (il s'agit en fait d'un slice). La première valeur de ce slice (la valeur stockée à l'index 0) est le nom de l'exécutable (plus exactement son chemin par rapport à l'endroit où vous l'avez exécuté) et os.Args[1:] (comprendre toutes les valeurs du slice à partir de l'index 1 inclus) contient les arguments de votre programme go. On peut aussi récupérer directement un des arguments en utilisant sa position dans le slice.
package main import ( "os" "fmt" ) func main() { arguments := os.Args //La ligne de commande avec le nom de l'exécutable argumentsSansExe := os.Args[1:] //La ligne de commande sans le nom de l'exécutable unArgument := os.Args[3] //Accès direct au troisième élément de la ligne de commande fmt.Println(arguments) fmt.Println(argumentsSansExe) fmt.Println(unArgument) }Afin de bien comprendre cet exemple, je vous encourage à compiler cet exemple (plutôt qu'utiliser la commande go run exemple.go), puis à l'exécuter ainsi :
go build exemple.go exemple a b c d e
go run command_line.go a b c d eLa valeur d'os.Args[0] indiquera un chemin d'accès qui correspond à votre répertoire temporaire. Ce qui est problématique si vous souhaitez utiliser l'emplacement exact de l'exécutable afin d'accéder à des ressources statiques livrées avec le programme. Comme un fichier de configuration qui serait dans le même répertoire que l'exécutable. Pour résoudre ce problème, je vous conseille de lire un de mes articles qui explique comment faire.
package main import ( "flag" "fmt" ) func main() { mot := flag.String("mot", "rien", "N'importe quel mot") nombre := flag.Int("nombre", 0, "Un entier") commutateur := flag.Bool("commutateur", false, "Un commutateur") flag.Parse() fmt.Println("Vous avez choisi le mot :", *mot) fmt.Println("Vous avez choisi le nombre :", *nombre) fmt.Println("Est-ce vous voulez le faire ?", *commutateur) fmt.Println("Tous les autres arguments :", flag.Args()) }
flags -h Usage of flags -commutateur=false: Un commutateur -mot="rien": N'importe quel mot -nombre=0: Un entier
flag provided but not defined: -too Usage of flags -commutateur=false: Un commutateur -mot="rien": N'importe quel mot -nombre=0: Un entier
fmt.Println("Tous les autres arguments :", flag.Args())Ce code fonctionne sans erreur à la condition que vous ayez fourni toutes les autres options.
Une traduction du blog officiel de golang expliquant le mécanisme de la réflexion en Go. Lire »
Traduction d'un article du blog officiel expliquant comment échanger des données entre deux programmes golang grâce à un format natif Lire »
Traduction d'une partie des spécifications officielles du langage Go, cet article explique comment développer en Go. Lire »
Préconisations officielles pour la gestion des erreurs dans un programme golang. Cet article complète les explications sur panic, defer et recover Lire »
Comment obtenir un rapport sur la couverture du code par les tests unitaires en golang ? Un exemple de code et de cas de test. Lire »
Soyez le premier à commenter cet article
Tous les commentaires sont soumis à modération. Les balises HTML sont pour la plupart autorisées. Les liens contextuels et intéressants sont en follow.