To answer your original question, yes, there's a reason it's done this
way. The output is a stateful stream that only the Encoder can write
to directly. It wouldn't work at all if clients could write to it. You
can't just wake up and write more stuff down a nested stream whenever
the mood strikes. (Plus the type info is per-stream.)
Don't work against the package, work with it. If you want to encode a
struct with gobs, recursively, let the system do it for you. Make the
struct fields exportable, or copy the data before encoding. Or just
encode your data! If you've really got something analogous to a couple
of ints, do something lightweight in your implementation of the
GobEncoder interface.
-rob