Argomenti da riga di comando in Go
In Go per usare gli argomenti da riga di comando possiamo usare os.Args o flag.
Il primo fa il parsing di tutto ciò che viene dopo il file .go da lanciare.
Il secondo ci permette di usare dei flag veri e propri.
Cominciamo dal primo:
package main
import (
"fmt"
"os"
)
func main() {
numArgs := len(os.Args)
fmt.Println(numArgs)
args := os.Args
fmt.Println(args)
if numArgs < 2 {
fmt.Println("Numero di argomenti errato")
os.Exit(1)
}
args1 := os.Args[1]
fmt.Println(args1)
}
E' possibile accedere agli argomenti come fossero un array, quindi usando gli indici.
Considerate che un argomento, lo zero per intenderci, c'è sempre; quindi dovete usare gli indici dall'uno in poi.
Se provate ad accedere ad un indice che non c'è, il programma va in crash; esattamente come farebbe per un array.
Un modo per non farlo andare in errore è controllare se il numero di argomenti è corretto.
Per lanciare il programma potete fare così:
go run main.go argomento1 argomento2
Per quanto riguarda il flag:
package main
import (
"flag"
"fmt"
)
func main() {
parola := flag.String("par", "foo", "la vostra parola")
numero := flag.Int("num", 42, "il vostro numero")
booleano := flag.Bool("bl", false, "true o false")
flag.Parse()
fmt.Println(*parola)
fmt.Println(*numero)
fmt.Println(*booleano)
}
Come vedete passiamo sempre tre argomenti:
- il flag da usare
- un valore di default
- una "istruzione"
Possiamo lanciare il programma in vari modi; ad esempio:
go run main.go
foo
42
false
go run main.go -par=ciao -num=30 -bl=true
ciao
30
true
In automatico abbiamo anche i flag per gli help:
go run main.go -h
Usage of /tmp/go-build1049533446/b001/exe/main:
-bl
true o false
-num int
il vostro numero (default 42)
-par string
la vostra parola (default "foo")
go run main.go -sbagliato
flag provided but not defined: -sbagliato
Usage of /tmp/go-build1230010421/b001/exe/main:
-bl
true o false
-num int
il vostro numero (default 42)
-par string
la vostra parola (default "foo")
exit status 2
Nel secondo esempio abbiamo messo un flag sbagliato per vedere cosa esce fuori in console.
Enjoy!
go args flag
Commentami!