flag.Float64 în Go

Definește o opțiune număr cu zecimale (-tva=0.19) și returnează un pointer la valoarea ei.

Sintaxă
func Float64(name string, value float64, usage string) *float64

Ce face flag.Float64

flag.Float64 citește un număr real cu strconv.ParseFloat. Separatorul zecimal este punctul (0.19), nu virgula. Sunt acceptate și formate ca 1e3 sau -2.5.

Parametri

Parametru Descriere
name Numele opțiunii.
value Valoarea implicită.
usage Descrierea pentru ajutor.

Ce returnează

Un *float64.

Exemple

Exemplul 1: Calculul prețului cu TVA

package main

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

func main() {
    os.Args = []string{"pret", "-net", "120.50", "-tva=0.21"}

    net := flag.Float64("net", 0, "prețul fără TVA, în lei")
    tva := flag.Float64("tva", 0.19, "cota de TVA")
    flag.Parse()

    fmt.Printf("net %.2f + TVA %.0f%% = %.2f lei\n", *net, *tva*100, *net*(1+*tva))
}

Rezultat

net 120.50 + TVA 21% = 145.81 lei

Exemplul 2: Virgula nu este acceptată

Setul de opțiuni afișează singur eroarea și ajutorul, apoi Parse returnează aceeași eroare, pe care o afișăm și noi.

package main

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

func main() {
    fs := flag.NewFlagSet("pret", flag.ContinueOnError)
    fs.SetOutput(os.Stdout)
    fs.Float64("net", 0, "prețul fără TVA")
    fmt.Println(fs.Parse([]string{"-net=120,50"}))
}

Rezultat

invalid value "120,50" for flag -net: parse error
Usage of pret:
  -net float
    	prețul fără TVA
invalid value "120,50" for flag -net: parse error

Greșeli frecvente

  • Utilizatorii din România scriu 120,50. Explică formatul în textul de ajutor sau înlocuiește virgula cu punct înainte, citind opțiunea ca text.

Comenzi înrudite

  • flag.Int: Definește o opțiune număr întreg (-n=10) și returnează un pointer la valoarea ei.
  • flag.Duration: Definește o opțiune de durată (-timeout=30s, -interval=1m30s) și returnează un pointer la time.Duration.
  • flag.Parse: Citește opțiunile din linia de comandă (os.Args) și completează variabilele definite cu flag.String, flag.Int etc.