The big difference is that with `(T, error)` as a return type, any value on the caller side will look like a valid one (thanks to zero values).
a, err := f()
// whether you forgot to handle the `err` or not,
// the `a` carries a zero value, or some other value.
In rust it's not the case, as the `T` in `Result<T, E>` won't be constructed in case of an error.