flag.String în Go

Definește o opțiune text (-nume=valoare) și returnează un pointer la valoarea ei.

Sintaxă
func String(name string, value string, usage string) *string

Ce face flag.String

flag.String declară o opțiune care primește un text. Returnează un *string; după flag.Parse() citești valoarea cu *nume. Dacă opțiunea lipsește din linia de comandă, valoarea este value.

Textul usage apare în ajutorul afișat la -h. Dacă pui un cuvânt între backtick-uri în el (de exemplu `fisier`), acesta apare ca nume al valorii în ajutor.

Parametri

Parametru Descriere
name Numele opțiunii, fără cratimă: "iesire" devine -iesire.
value Valoarea implicită.
usage Descrierea pentru ajutor.

Ce returnează

Un *string care va conține valoarea după Parse.

Exemple

Exemplul 1: Fișier de ieșire și format

package main

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

func main() {
    os.Args = []string{"export", "-iesire", "clienti.csv"}

    iesire := flag.String("iesire", "raport.txt", "fișierul în care se scrie")
    format := flag.String("format", "csv", "formatul: csv sau json")
    flag.Parse()

    fmt.Printf("export în %s, format %s\n", *iesire, *format)
}

Rezultat

export în clienti.csv, format csv

Exemplul 2: Valori cu spații și validare

package main

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

func main() {
    os.Args = []string{"salut", "-nume=Ana Maria", "-limba", "fr"}

    nume := flag.String("nume", "vizitator", "pe cine salutăm")
    limba := flag.String("limba", "ro", "limba: ro sau en")
    flag.Parse()

    if !slices.Contains([]string{"ro", "en"}, *limba) {
        fmt.Printf("limba %q nu este acceptată, folosesc ro\n", *limba)
        *limba = "ro"
    }
    fmt.Printf("Bună, %s! (limba: %s)\n", *nume, *limba)
}

Rezultat

limba "fr" nu este acceptată, folosesc ro
Bună, Ana Maria! (limba: ro)

Greșeli frecvente

  • Folosești pointerul fără *: fmt.Println(iesire) afișează o adresă de memorie, nu textul.
  • Definești aceeași opțiune de două ori: programul se oprește cu panică „flag redefined”.

Comenzi înrudite

  • flag.StringVar: Definesc opțiuni care scriu valoarea direct într-o variabilă existentă (text, întreg, boolean), fără pointer returnat.
  • flag.Int: Definește o opțiune număr întreg (-n=10) și returnează un pointer la valoarea ei.
  • flag.Parse: Citește opțiunile din linia de comandă (os.Args) și completează variabilele definite cu flag.String, flag.Int etc.
  • flag.PrintDefaults: Afișează lista tuturor opțiunilor definite, cu tipul, descrierea și valoarea implicită.