os.Expand în Go

Înlocuiește $nume și ${nume} dintr-un text folosind o funcție proprie care dă valoarea fiecărui nume.

Sintaxă
func Expand(s string, mapping func(string) string) string

Ce face os.Expand

os.Expand funcționează ca os.ExpandEnv, dar valorile nu vin din mediu, ci din funcția mapping, pe care o scrii tu. Funcția primește numele (fără $ și acolade) și returnează textul de pus în loc.

Este un mod rapid de a face șabloane simple, fără text/template: mesaje, nume de fișiere, URL-uri.

Parametri

Parametru Descriere
s Textul cu $nume sau ${nume}.
mapping Funcția care primește numele și returnează valoarea.

Ce returnează

Textul cu toate numele înlocuite.

Exemple

Exemplul 1: Valori dintr-un map

package main

import (
    "fmt"
    "os"
)

func main() {
    date := map[string]string{"client": "Mihai", "comanda": "1042", "total": "249,90"}
    sablon := "Bună, $client! Comanda #${comanda} în valoare de ${total} lei a fost expediată."
    fmt.Println(os.Expand(sablon, func(nume string) string { return date[nume] }))
}

Rezultat

Bună, Mihai! Comanda #1042 în valoare de 249,90 lei a fost expediată.

Exemplul 2: Nume necunoscute păstrate vizibil

package main

import (
    "fmt"
    "os"
)

func main() {
    date := map[string]string{"oras": "Cluj"}
    rezultat := os.Expand("Livrare în $oras, județul $judet", func(nume string) string {
        if v, ok := date[nume]; ok {
            return v
        }
        return "<" + nume + " lipsă>"
    })
    fmt.Println(rezultat)
}

Rezultat

Livrare în Cluj, județul <judet lipsă>

Greșeli frecvente

  • Te aștepți ca un $ izolat să rămână neschimbat în orice situație. $ urmat de anumite caractere speciale ($1, $*) este tratat ca nume; dacă textul conține sume în dolari, alege alt șablon.

Comenzi înrudite

  • os.ExpandEnv: Înlocuiește $NUME și ${NUME} dintr-un text cu valorile variabilelor de mediu.
  • os.Getenv: Returnează valoarea unei variabile de mediu sau textul gol dacă variabila nu există.