Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mtrojahn
Last active June 22, 2021 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mtrojahn/0a1284e03bd4d2254e8bf91b3c944b75 to your computer and use it in GitHub Desktop.
Save mtrojahn/0a1284e03bd4d2254e8bf91b3c944b75 to your computer and use it in GitHub Desktop.
Binary comparison example
const (
roleUser = 1 << iota
roleSuperUser
roleAdmin
)
type User struct {
name string
role uint
}
func hasRole(user User, role uint) bool {
return role & user.role == role
}
func addRole(user *User, role uint) {
user.role = user.role | role
}
func delRole(user *User, role uint) {
user.role = user.role &^ role
}
func main() {
user := User{"John Doe", roleUser }
fmt.Printf("user has role roleUser? %v\n", hasRole(user, roleUser))
fmt.Printf("user has role roleSuperUser? %v\n", hasRole(user, roleSuperUser))
fmt.Printf("user has role roleAdmin? %v\n", hasRole(user, roleAdmin))
addRole(&user, roleSuperUser)
fmt.Printf("user has role roleUser? %v\n", hasRole(user, roleUser))
fmt.Printf("user has role roleSuperUser? %v\n", hasRole(user, roleSuperUser))
fmt.Printf("user has role roleAdmin? %v\n", hasRole(user, roleAdmin))
delRole(&user, roleUser)
fmt.Printf("user has role roleUser? %v\n", hasRole(user, roleUser))
fmt.Printf("user has role roleSuperUser? %v\n", hasRole(user, roleSuperUser))
fmt.Printf("user has role roleAdmin? %v\n", hasRole(user, roleAdmin))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment