func Value[T any](v T) bool {
	var i interface{} = v
	switch m := i.(type) {
	case interface{ Bool() bool }:
		return m.Bool()
	case interface{ IsZero() bool }:
		return !m.IsZero()
	}
	switch rv := reflect.ValueOf(&v).Elem(); rv.Kind() {
	case reflect.Map, reflect.Slice:
		return rv.Len() != 0
	default:
		return !rv.IsZero()
	}
}
Value returns the truthy value of anything.
If the value's type has a Bool() bool method, the method is called and returned.
If the type has an IsZero() bool method, the opposite value is returned.
Slices and maps are truthy if they have a length greater than zero.
All other types are truthy if they are not their zero value.

Note that the usual Go type system caveats apply around a nil pointer value not being a nil interface value.
package truthy
import (
	"reflect"
)