> I have seen a ticket on this topic (or something related to it) on Github but I thought I would ask this community first:
>
> In first instance, I got "suspect or: role != admin || role != superadmin"
> In the second instance, it works just fine. I have verified that role is string type (with %T verb).
>
> since role can be admin, superadmin, or anything else for that matter, why would the first case generate the suspect message, and the second case works fine.
>
> I am running go version go1.13.4 darwin/amd64 on a Mac
>
>
> First Instance:
>
> const (
> admin = "admin"
> superadmin = "superadmin"
> )
>
> invalidRole := role != admin || role != superadmin
This sets invalidRole if role != admin or if role != superadmin.
Let's say role is admin. Then role != superadmin is true, so
invalidRole is set to true. Let's say role is superadmin. Then role
!= admin is true, so invalidRole is set to true. Let's say role is
frobozz. Then role != admin is true, so invalidRole is set to true.
In other words, invalidRole is always set to true. This is a "suspect
or".
> Second instance:
>
> const (
> admin = "admin"
> superadmin = "superadmin"
> )
>
> validRole := role == admin || role == superadmin
There is no such confusion here.
Ian