Ce face const
const declară o valoare care nu se schimbă. Valoarea trebuie cunoscută la compilare: un literal (21, "RON"), o expresie cu alte constante (24 * 60) sau rezultatul unor funcții predefinite pe constante (len("abc")). Rezultatul unei funcții obișnuite, un slice sau un map nu pot fi constante.
Constantele pot fi netipizate (const Limita = 100), caz în care se adaptează tipului de care e nevoie (int, float64, time.Duration), sau tipizate (const Limita int64 = 100). Mai multe constante se grupează în const ( ... ), unde iota ajută la numerotare.
Exemple
Exemplul 1: Constante simple și grupate
package main
import "fmt"
const TVA = 0.21
const (
Moneda = "lei"
MinutePeZi = 24 * 60
SecundePeZi = MinutePeZi * 60
LivrareGratis = 200.0
)
func main() {
pret := 150.0
total := pret * (1 + TVA)
fmt.Printf("total: %.2f %s\n", total, Moneda)
fmt.Println("livrare gratuită:", total >= LivrareGratis)
fmt.Println("secunde într-o zi:", SecundePeZi)
}
Rezultat
total: 181.50 lei
livrare gratuită: false
secunde într-o zi: 86400
Exemplul 2: Ce nu poate fi constantă
Un slice nu poate fi const; folosește var. len pe un text constant este însă constantă.
package main
import "fmt"
const Salut = "Bună ziua"
const Lungime = len(Salut) // constantă: lungimea în octeți
var Zile = []string{"luni", "marți", "miercuri"} // slice: doar var
func main() {
fmt.Println(Salut, Lungime)
fmt.Println(Zile)
}
Rezultat
Bună ziua 10
[luni marți miercuri]
Greșeli frecvente
const zile = []string{...}: slice-urile, map-urile și struct-urile nu pot fi constante.const acum = time.Now(): valoarea trebuie să fie cunoscută la compilare.- Atribuirea unei valori noi:
cannot assign to TVA (neither addressable nor a map index expression).
Comenzi înrudite
iota: Contor folosit în blocurile const: pornește de la 0 și crește cu 1 la fiecare rând; ideal pentru enumerări.constante netipizate: Constantele fără tip se adaptează tipului de care e nevoie și sunt calculate cu precizie mare la compilare.var și :=: Declară variabile: var cu tip sau valoare inițială, sau := (declarare scurtă cu tip dedus) în funcții.