Logical operators
Logical operators apply to boolean values and yield a result of the same type as the operands. The left operand is evaluated, and then the right if the condition requires it.
&& conditional AND p && q is "if p then q else false" || conditional OR p || q is "if p then true else q" ! NOT !p is "not p"
I think this is pretty intuitive. I mean, it’s only logical, after all….

The most important thing I think to call out here is that the order of operations matters. The right condition(s) are only executed if they need to be. This can matter if you have an expensive operation in your list:
func isValid(t Thing) bool {
var valid bool
/*
Do some expensive validation on t to ensure it's valid.
Perhaps querying a database, or a remote API call.
*/
return valid
}
/* then later */
if isValid(t) && time.Now().Before(deadline) {
/* Do something */
}
In this example, it would probably be better to re-order the conditional:
if time.Now().Before(deadline) && isValid(t) {
Because in this case, we only have to do the expensive isValid
call if the deadline has not passed.
Quotes from The Go Programming Language Specification Language version go1.22 (Feb 6, 2024)