Opzioni ai Comandi

E' possibile riconoscere opzioni del comando, con una certa variabilità di formati.

Le opzioni possono essere stringhe, numeri o booleani.
Per ciascuna di loro occore predefinire il nome, il valore di default e una descrizione, tramite varie funzioni del package flag a seconda del tipo di opzione.

La funzione Parse quindi scandisce e interpreta la linea di comando.

(600command-line-flags.go):

// I flag servono a definire opzioni
package main

import "flag"
import "fmt"

func main() {

	// Opzione stringa con nome, valore default, descrizione
	// Ritorna un puntatore
	wordPtr := flag.String("word", "foo", "a string")

	// Opzione intero
	numbPtr := flag.Int("numb", 42, "an int")
	// Opzione booleana
	boolPtr := flag.Bool("fork", false, "a bool")

	// Opzione che usa una variabile già esistente
	var svar string
	flag.StringVar(&svar, "svar", "bar", "a string var")

	// Fa il parse della linea di comando
	flag.Parse()

	// Stampa delle opzioni acquisite o i loro default
	// con accesso tramite puntatore
	fmt.Println("word:", *wordPtr)
	fmt.Println("numb:", *numbPtr)
	fmt.Println("fork:", *boolPtr)
	// Notare che la sottostante variabile
	// svar riceve un valore dalle opzioni
	fmt.Println("svar:", svar)
	fmt.Println("tail:", flag.Args())
}
// Provare il comportamento con:
// eseguibile -word=sam
// eseguibile --word=sam
// eseguibile --word=sam --word=sam --numb=88 --fork=true john smith
// eseguibile --word=sam --word=sam --numb=88 john smith --fork
// eseguibile --word=sam --word=sam --numb=88 john smith --fork
// eseguibile --help
// eseguibile --fred=33

Un vantaggio è la possibilità di acquisire da opzione il valore di una variabile dichiarata all'interno del programma, con la funzione StringVar. Occorre passare come primo argomento l'indirizzo della variabile di appoggio.