Zoeken…
Invoering
Iota biedt een manier om numerieke constanten te declareren vanaf een startwaarde die monotoon groeit. Iota kan worden gebruikt om bitmaskers te declareren die vaak worden gebruikt in systeem- en netwerkprogrammering en andere lijsten met constanten met gerelateerde waarden.
Opmerkingen
De iota
ID wordt gebruikt om waarden toe te wijzen aan lijsten met constanten. Wanneer iota in een lijst wordt gebruikt, begint het met een waarde van nul en wordt het met één verhoogd voor elke waarde in de lijst met constanten en wordt het gereset voor elk const
sleutelwoord. In tegenstelling tot de opsommingen van andere talen, kan iota worden gebruikt in uitdrukkingen (bijv. iota + 1
), wat een grotere flexibiliteit mogelijk maakt.
Eenvoudig gebruik van iota
Om een lijst met constanten te maken, wijst u iota
waarde toe aan elk element:
const (
a = iota // a = 0
b = iota // b = 1
c = iota // c = 2
)
Om een lijst met constanten op een verkorte manier te maken, wijst u iota
waarde toe aan het eerste element:
const (
a = iota // a = 0
b // b = 1
c // c = 2
)
Iota gebruiken in een uitdrukking
iota
kan in uitdrukkingen worden gebruikt, dus het kan ook worden gebruikt om andere waarden toe te wijzen dan eenvoudige oplopende gehele getallen vanaf nul. Gebruik dit voorbeeld van Effective Go om constanten voor SI-eenheden te maken:
type ByteSize float64
const (
_ = iota // ignore first value by assigning to blank identifier
KB ByteSize = 1 << (10 * iota)
MB
GB
TB
PB
EB
ZB
YB
)
Waarden overslaan
De waarde van iota
wordt nog steeds verhoogd voor elk item in een constante lijst, zelfs als iota niet wordt gebruikt:
const ( // iota is reset to 0
a = 1 << iota // a == 1
b = 1 << iota // b == 2
c = 3 // c == 3 (iota is not used but still incremented)
d = 1 << iota // d == 8
)
het wordt ook verhoogd als er helemaal geen constante wordt gemaakt, wat betekent dat de lege identifier kan worden gebruikt om waarden volledig over te slaan:
const (
a = iota // a = 0
_ // iota is incremented
b // b = 2
)
Het eerste codeblok is afkomstig van de Go Spec (CC-BY 3.0).
Gebruik van iota in een uitdrukkingslijst
Omdat iota
na elke ConstSpec
wordt ConstSpec
, hebben waarden in dezelfde expressielijst dezelfde waarde voor iota
:
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // skips iota == 2
bit3, mask3 // bit3 == 8, mask3 == 7
)
Dit voorbeeld is afkomstig van de Go Spec (CC-BY 3.0).
Gebruik van iota in een bitmasker
Iota kan erg handig zijn bij het maken van een bitmasker. Om bijvoorbeeld de status van een netwerkverbinding weer te geven die veilig, geverifieerd en / of gereed is, kunnen we een bitmasker maken zoals het volgende:
const (
Secure = 1 << iota // 0b001
Authn // 0b010
Ready // 0b100
)
ConnState := Secure|Authn // 0b011: Connection is secure and authenticated, but not yet Ready
Gebruik van iota in const
Dit is een opsomming van const-creatie. Go compiler start iota vanaf 0 en wordt met één verhoogd voor elke volgende constante. De waarde wordt bepaald tijdens het compileren in plaats van tijdens het uitvoeren. Daarom kunnen we iota niet toepassen op expressies die tijdens runtime worden geëvalueerd.
Programma om iota te gebruiken in const
package main
import "fmt"
const (
Low = 5 * iota
Medium
High
)
func main() {
// Use our iota constants.
fmt.Println(Low)
fmt.Println(Medium)
fmt.Println(High)
}
Probeer het in Go Playground