I agree, the lack of stack traces can be annoying when debugging Go programs. Instead of returning raw errors everywhere, the problem can be alleviated by adding some context to returned errors:
if err := foo(x); err != nil {
return fmt.Errorf("foo: bad argument %s", x)
}