Sometimes it is useful to have a function which returns true only when all arguments passed to it are true. This is often expressed as a list or array of arguments or as a variadic function, but all arguments must be of a boolean type, or if expressions, they must evaluate to a boolean value.
package main
import (
"fmt"
)
func all(b ...bool) bool {
if len(b) == 0 {
return false
} else if len(b) == 1 {
return b[0]
}
return b[0] && all(b[1:]...)
}
func main() {
fmt.Printf("Good => %v\n",
all(true, true, true))
fmt.Printf("Good => %v\n",
all(true && true, true && !false, !false && !false))
fmt.Printf("Good => %v\n",
all(2 == 2, true, 1 == 1, "a" == "a"))
fmt.Printf("Good => %v\n",
all(2 > 1, 3 < 4, 1 == 1, "a" == "a", true == true, false == false))
fmt.Printf("Not Good => %v\n",
all(1 == 2, true, 1 == 1, "a" == "a"))
fmt.Printf("Not Good => %v\n",
all(2 > 1, -2 < 1, "a" == "a", true, false))
fmt.Printf("Not Good => %v\n",
all(true, true, true, false))
}