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

Bit Flags

bit_flags.go
package main

import "fmt"

const (
	FlagRead = 1 << iota
	FlagWrite
	FlagDelete
)

func main() {
	var level = 
	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 = 
	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 = 
	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)
}
flags Use named bit masks and bitwise checks so compact storage still reads clearly.