szaydel
4/23/2018 - 5:44 PM

Alternative to Python implementation of all(...) in Go

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))

}