Ce face cmp.Or
cmp.Or(a, b, c) returnează primul argument care nu este valoarea zero a tipului: "" pentru texte, 0 pentru numere, nil pentru pointeri. Dacă toate sunt zero, returnează zero.
Prima utilizare: valori implicite. cmp.Or(os.Getenv("PORT"), "8080") ia portul din mediu sau, dacă lipsește, 8080.
A doua utilizare: sortare după mai multe criterii. cmp.Or(cmp.Compare(a.Oras, b.Oras), cmp.Compare(a.Nume, b.Nume)) compară după oraș, iar dacă orașele sunt egale (rezultat 0) trece la nume.
Parametri
| Parametru | Descriere |
|---|---|
vals |
Valorile verificate, în ordine. |
Ce returnează
Prima valoare nenulă sau valoarea zero a tipului.
Exemple
Exemplul 1: Valori implicite
Variabila de mediu nu este setată, deci Getenv returnează "" și se folosește valoarea implicită.
package main
import (
"cmp"
"fmt"
"os"
)
func main() {
port := cmp.Or(os.Getenv("DEXBLOG_PORT_EXEMPLU"), "8080")
fmt.Println("Port:", port)
var porecla string
fmt.Println("Salut,", cmp.Or(porecla, "Ana"))
fmt.Println(cmp.Or(0, 0, 3, 5))
fmt.Printf("%q\n", cmp.Or("", ""))
}
Rezultat
Port: 8080
Salut, Ana
3
""
Exemplul 2: Sortare după oraș, apoi după nume
package main
import (
"cmp"
"fmt"
"slices"
)
type Client struct {
Nume, Oras string
}
func main() {
clienti := []Client{{"Radu", "Iași"}, {"Ana", "Cluj"}, {"Elena", "Iași"}, {"Bogdan", "Cluj"}}
slices.SortFunc(clienti, func(a, b Client) int {
return cmp.Or(
cmp.Compare(a.Oras, b.Oras),
cmp.Compare(a.Nume, b.Nume),
)
})
for _, c := range clienti {
fmt.Println(c.Oras, c.Nume)
}
}
Rezultat
Cluj Ana
Cluj Bogdan
Iași Elena
Iași Radu
Greșeli frecvente
- Folosești
cmp.Orcând 0 sau""este o valoare validă (de exemplu o reducere de 0%):Oro tratează ca „lipsă” și alege valoarea implicită. - Te aștepți ca
cmp.Orsă evalueze argumentele leneș, ca||: toate argumentele sunt calculate înainte de apel.
Comenzi înrudite
cmp.Compare: Compare returnează -1, 0 sau +1 după cum x este mai mic, egal sau mai mare decât y; Less spune dacă x < y.slices.SortFunc: Sortează un slice după o funcție de comparare care returnează negativ, zero sau pozitiv; SortStableFunc păstrează ordinea celor egali.sort.Slice: Sortează un slice de orice tip după o funcție less(i, j); SliceStable păstrează ordinea elementelor egale.