flag.Bool în Go

Definește o opțiune da/nu: simpla prezență (-v) o face true.

Sintaxă
func Bool(name string, value bool, usage string) *bool

Ce face flag.Bool

flag.Bool definește un comutator. -v sau -v=true îl fac true; -v=false îl face false. Valorile acceptate sunt cele din strconv.ParseBool: 1, t, true, 0, f, false etc.

Spre deosebire de celelalte opțiuni, valoarea nu poate fi dată separat: -v false înseamnă -v (adică true) urmat de argumentul obișnuit false, care oprește citirea opțiunilor.

Parametri

Parametru Descriere
name Numele opțiunii.
value Valoarea implicită (de obicei false).
usage Descrierea pentru ajutor.

Ce returnează

Un *bool.

Exemple

Exemplul 1: Mod detaliat și simulare

package main

import (
    "flag"
    "fmt"
    "os"
)

func main() {
    os.Args = []string{"sterge-vechi", "-v", "-simulare=true"}

    detaliat := flag.Bool("v", false, "afișează fiecare fișier")
    simulare := flag.Bool("simulare", false, "nu șterge nimic, doar arată")
    flag.Parse()

    for _, f := range []string{"log-2023-01.txt", "log-2023-02.txt"} {
        if *detaliat {
            fmt.Println("de șters:", f)
        }
        if !*simulare {
            os.Remove(f)
        }
    }
    fmt.Println("simulare:", *simulare)
}

Rezultat

de șters: log-2023-01.txt
de șters: log-2023-02.txt
simulare: true

Exemplul 2: Capcana „-v false”

package main

import (
    "flag"
    "fmt"
    "os"
)

func main() {
    os.Args = []string{"program", "-v", "false", "-x"}
    v := flag.Bool("v", false, "detalii")
    flag.Parse()
    fmt.Println("v =", *v)
    fmt.Println("argumente rămase:", flag.Args())
}

Rezultat

v = true
argumente rămase: [false -x]

Greșeli frecvente

  • Scrii -v false și te aștepți la false. Folosește -v=false.
  • Definești o opțiune Bool cu valoarea implicită true; utilizatorul trebuie să scrie -optiune=false ca s-o oprească, ceea ce e neintuitiv. Preferă un nume negativ: -fara-culori.

Comenzi înrudite

  • flag.StringVar: Definesc opțiuni care scriu valoarea direct într-o variabilă existentă (text, întreg, boolean), fără pointer returnat.
  • flag.Parse: Citește opțiunile din linia de comandă (os.Args) și completează variabilele definite cu flag.String, flag.Int etc.
  • flag.Args: Returnează argumentele obișnuite rămase după opțiuni: toate (Args), unul anume (Arg) sau câte sunt (NArg).