go / intermediate
Snippet
Erstellen von Bitmasken-Flags mit Const und Iota
Die Verwendung von iota in einem const-Block ermöglicht das effiziente Erstellen von bitweisen Flags. Da sich iota in jeder Zeile um 1 erhöht, erzeugt die Kombination mit dem Bitverschiebungsoperator (1 << iota) eindeutige Zweierpotenzen. Diese Werte können dann mit ODER (|) kombiniert und mit UND (&) überprüft werden.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package mainimport "fmt"type Permission intconst (Read Permission = 1 << iotaWriteExecute)func main() {userPerm := Read | WritehasWrite := (userPerm & Write) != 0hasExecute := (userPerm & Execute) != 0fmt.Printf("Has write: %t\n", hasWrite)fmt.Printf("Has execute: %t\n", hasExecute)}
Erklärung
1
Read Permission = 1 << iota
Initialisiert die iota-Sequenz bei Index 0, was 1 um 0 Bits nach links verschiebt und 1 ergibt.
2
Write
Repliziert implizit den Ausdruck '1 << iota'. iota wird 1, verschiebt 1 um 1 Bit nach links und ergibt 2.
3
userPerm := Read | Write
Kombiniert die Lese- und Schreib-Flags mithilfe des bitweisen ODER-Operators.
4
hasWrite := (userPerm & Write) != 0
Prüft das Vorhandensein des Schreib-Flags mithilfe des bitweisen UND-Operators.