what is bitmask check in Go

tags: learning go programming

content

  • im seeing this code:
if segmentedLine.Flags&parser.Elided == parser.Elided {
	break
}
  • type of segmentedLine is GraphRowLine
type GraphRowLine struct {
	// other fields
	Flags    RowLineFlags
}
  • and we have
type RowLineFlags int
const (
	Revision RowLineFlags = 1 << iota
	Highlightable
	Elided
)
if segmentedLine.Flags&parser.Elided == parser.Elided {
	break
}
  • in other words, this condition checks:

    • does segmented.Flags contain parser.Elided flag?
  • in an more Go idiomatic way:

if segmentedLine.Flags & parser.Elided != 0 {
	// do something
}
  • because every flag only has 1 bit activated,
    • after AND operation, the result could only be 0 or parser.Elided
    • if it’s not zero, it means Flags contains Elided flag

up

down

reference