Modulelessen (3/5)
Constanten en jota
Constanten zijn onveranderlijke waarden die bekend zijn tijdens het compileren. In Go zijn ze dat
gedeclareerd met const en kan typed of untyped zijn. Ongetypeerde exemplaren hebben een
superkracht: ze passen zich aan het type aan dat de context vereist, en sparen u
zodat u geen expliciete conversies hoeft te schrijven.
Basissyntaxis
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"MaxRetry is getypt (int): je kunt het alleen toewijzen aan een int.
PI en Name zijn niet getypt: ze gedragen zich als "letterlijk" en passen zich aan
de context.
const PI = 3.14
var f float32 = PI // ok: PI è non tipata, diventa float32
var d float64 = PI // okconst blokken
U kunt meerdere constanten in een blok groeperen:
const (
StateInitial = "INIT"
StateReady = "READY"
StateError = "ERROR"
)iota: de opsommingsteller
Binnen een const blok begint de speciale identificatie iota bij 0
en wordt op elke regel met 1 verhoogd. Het is het idioom voor het maken van opsommingen:
const (
Monday = iota // 0
Tuesday // 1
Wednesday // 2
Thursday // 3
Friday // 4
)Volgende regels erven de expressie als ze er geen bieden.
Daarom is het schrijven van Tuesday voldoende zonder = iota te herhalen.
Patronen met uitdrukkingen
iota kan verschijnen in willekeurige expressies:
const (
KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
MB // 1 << 20
GB // 1 << 30
TB // 1 << 40
)Een waarde overslaan
Als u geen waarde aan een regel wilt toekennen (omdat u iota wilt
toch verhogen), gebruik dan de lege identificatie _:
const (
_ = iota // scarta 0
KB // 1
MB // 2
)Jouw beurt
Declareer een constante PI met waarde 3.14 op pakketniveau en druk deze vervolgens af in main.
Toon hint
`const PI = 3.14` gaat op pakketniveau, buiten main.
Oplossing beschikbaar na 3 pogingen
Definieer een const-blok met de dagen van de week (maandag, dinsdag, woensdag) genummerd vanaf 1 met iota.
Toon hint
Gebruik `iota + 1` op de eerste regel van het blok; daaropvolgende regels nemen de expressie over.
Oplossing beschikbaar na 3 pogingen
Wat print dit programma?
const (
A = iota * 2
B
C
)
fmt.Println(A, B, C)Samenvatten
constvoor onveranderlijke waarden die bekend zijn tijdens het compileren.- Niet-getypeerde constanten passen zich aan de context aan: geen conversie nodig.
const ( ... )blokkeert groepsgerelateerde waarden.iotabegint bij 0 in elk blok en wordt regel voor regel verhoogd.- Patronen: opsomming (
= iota), bitmasker (= 1 << iota), eenheden (= 1 << (10*iota)).