Bit flags pack several yes/no capabilities into one integer while keeping checks explicit.

flags Use named bit masks and bitwise checks so compact storage still reads clearly.

Bit Flags

level
bit_flags.go
Replay: real traced execution (multi-file project)
package main

import "fmt"

const (
	FlagRead = 1 << iota
	FlagWrite
	FlagDelete
)

func main() {
	var level = 2
	flags := FlagRead
	if level >= 2 {
		flags |= FlagWrite
	}
	if level >= 3 {
		flags |= FlagDelete
	}

	canWrite := flags&FlagWrite != 0
	canDelete := flags&FlagDelete != 0

	fmt.Println("level=", level)
	fmt.Println("flags=", flags)
	fmt.Println("can_write=", canWrite)
	fmt.Println("can_delete=", canDelete)
}
package main

import "fmt"

const (
	FlagRead = 1 << iota
	FlagWrite
	FlagDelete
)

func main() {
	var level = 1
	flags := FlagRead
	if level >= 2 {
		flags |= FlagWrite
	}
	if level >= 3 {
		flags |= FlagDelete
	}

	canWrite := flags&FlagWrite != 0
	canDelete := flags&FlagDelete != 0

	fmt.Println("level=", level)
	fmt.Println("flags=", flags)
	fmt.Println("can_write=", canWrite)
	fmt.Println("can_delete=", canDelete)
}
package main

import "fmt"

const (
	FlagRead = 1 << iota
	FlagWrite
	FlagDelete
)

func main() {
	var level = 3
	flags := FlagRead
	if level >= 2 {
		flags |= FlagWrite
	}
	if level >= 3 {
		flags |= FlagDelete
	}

	canWrite := flags&FlagWrite != 0
	canDelete := flags&FlagDelete != 0

	fmt.Println("level=", level)
	fmt.Println("flags=", flags)
	fmt.Println("can_write=", canWrite)
	fmt.Println("can_delete=", canDelete)
}
  1. level ← 2, flags ← 1

    11func main() {12  var level→ 2 = 2 //@level=1, 313  flags→ 1 := FlagRead114  if level >= 2 {
  2. flags ← 3

    13flags := FlagRead14if level2 >= 2 {15  flags→ 3 |= FlagWrite216}
  3. canWrite ← true, canDelete ← false

    21  canWrite→ true := flags3&FlagWrite2 != 022  canDelete→ false := flags3&FlagDelete4 != 02324  fmt.Println("level=", level2)25  fmt.Println("flags=", flags3)26  fmt.Println("can_write=", canWritetrue)27  fmt.Println("can_delete=", canDeletefalse)28}
    outputlevel= 2
    flags= 3
    can_write= true
    can_delete= false
  1. level ← 1, flags ← 1, canWrite ← false, canDelete ← false

    11func main() {12  var level→ 1 = 113  flags→ 1 := FlagRead114  if level >= 2 {15    flags |= FlagWrite16  }17  if level >= 3 {18    flags |= FlagDelete19  }2021  canWrite→ false := flags1&FlagWrite2 != 022  canDelete→ false := flags1&FlagDelete4 != 02324  fmt.Println("level=", level1)25  fmt.Println("flags=", flags1)26  fmt.Println("can_write=", canWritefalse)27  fmt.Println("can_delete=", canDeletefalse)28}
    outputlevel= 1
    flags= 1
    can_write= false
    can_delete= false
  1. level ← 3, flags ← 1

    11func main() {12  var level→ 3 = 313  flags→ 1 := FlagRead114  if level >= 2 {
  2. flags ← 3

    13flags := FlagRead14if level3 >= 2 {15  flags→ 3 |= FlagWrite216}
  3. flags ← 7

    16}17if level3 >= 3 {18  flags→ 7 |= FlagDelete419}
  4. canWrite ← true, canDelete ← true

    21  canWrite→ true := flags7&FlagWrite2 != 022  canDelete→ true := flags7&FlagDelete4 != 02324  fmt.Println("level=", level3)25  fmt.Println("flags=", flags7)26  fmt.Println("can_write=", canWritetrue)27  fmt.Println("can_delete=", canDeletetrue)28}
    outputlevel= 3
    flags= 7
    can_write= true
    can_delete= true