const în Go

Declară constante: valori fixe, calculate la compilare (numere, texte, bool), care nu se mai pot modifica.

Sintaxă
const Pi = 3.14159
const TVA float64 = 0.21
const (
    A = 1
    B = "text"
)

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.