Skip to content

Latest commit

 

History

History
51 lines (40 loc) · 1.02 KB

File metadata and controls

51 lines (40 loc) · 1.02 KB

bitflags

Go Reference

This covers a specific use-case for bit flags where:

  • You want the flags themselves defined separately.
  • You want to iterate over set values, and rely on exhaustive-switch linters to make you account for everything.
  • You want generic support for "safety" (convenience), and support any type with constraints.Unsigned storage.

A code block is worth 1000 words:

package main

import (
	"fmt"

	"github.com/coxley/bitflags"
)

type perms uint8

const (
	read perms = 1 << iota
	write
	exec
)

func main() {
	var flags bitflags.Set[perms]
	flags.Add(read, exec)    // alt: bitflags.NewSet(read, exec)
	flags.HasAll(read, exec) // true
	flags.Has(write)         // false

	// Output:
	//   read: set
	//   exec: set
	for flag := range flags.All() {
		switch flag {
		case read:
			fmt.Println("read: set")
		case write:
			fmt.Println("write: set")
		case exec:
			fmt.Println("exec: set")
		}
	}
}