You mean reading a gig value consumes too much memory? Then why not read it in chunks?
d := gob.NewDecoder(conn)
var src io.Reader // will read the gig value directly from conn
err := d.Decode(&src)
...
dst, err := os.Create("file")
...
err = io.Copy(dst, src)
...
As an alternative to:
d := gob.NewDecoder(conn)
var src []byte // the complete gig value, in memory
err := d.Decode(src)
...
dst, err := os.Create("file")
...
err = io.Copy(dst, bytes.NewReader(src))
...
The only issue is that you have to finish reading from the reader in order to read further values. Unless you seek.
However, I couldn't see how this proposal could help enough to be worth the effort.