As far as I understand, the package
archive/zipdoes not allow to decompress a zip file as a stream. We have to fully load the zip in memory or as a file and decompress afterwards.
Wrong. Some metadata needs to be loaded into memory, yes, but you do not need to load everything into memory. You can extract individual files from a zip archive. See How to unzip a single file?
zip.Writer doesn't implement
io.Writer, because they are not a single source or target of bytes. But the files in them, they are. So the files in them implement
io.Writer. More specifically a file in an archive is represented by a
zip.File which may be used to obtain an
io.Reader to get its (uncompressed) content using
File.Open(). When you add a new entry to a zip archive using e.g.
Writer.Create(), that returns you an
io.Writer because that represents a target of bytes, you can write the file's content into it.
Back to your exmaple:
MyZip also does not represent a single source or destination of bytes, so it doesn't make sense to itself implement
io.Writer, so don't do it. Similarly to
archive/zip, the individual files in it may do so.