You do need to use either two channels (horrible code) or some kind of Result{T,error} wrapper (bad language design).