需要在golang中生成运行时二进制编码文件

时间:2019-03-06 09:03:49

标签: file go encode

我正在处理需要将文件生成为二进制编码(字节)的项目。事实是,我不想存储文件,而只需要编码的数据就可以与一些测试数据进行验证。

这是我有zip file的示例代码

上面的示例适用于zip,但我不限于使用zip或任何文件类型。在这里,我们需要存储文件以进行读取,但我不想以后再存储和删除文件。

我知道寻求帮助的工作并不多,但是作为一个新手,我只是来解决这个问题。

谢谢。

1 个答案:

答案 0 :(得分:3)

更好的做法是不要依赖具体类型(例如os.File),而应使用描述您要使用该文件的功能的接口。

例如如果您有一个因为要读取文件而需要文件的函数,请改用io.Reader

func process(r io.Reader) error {
    // ...
}

类似地,如果要写入文件,请使用io.Writer,或者如果要同时执行,请使用io.ReadWriterio.ReadWriteCloser。您可以将*os.File的值传递给这些函数,因为*os.File实现了这些接口。

这样做的好处是,您可以使用实现接口的任何值来调用这些函数。如果要测试这些功能,则可以传递内存bytes.Buffer,该内存实现io.Readerio.Writer,并且可以在运行时手动构造其内容,例如:

buf := &bytes.Buffer{}
buf.Write([]byte{1, 2, 3})
buf.WriteString("Hello")

此处buf将包含字节123和字符串"Hello"。之后,您可以在需要阅读者或作家的地方传递buf,例如:

process(buf)

查看类似/相关的问题和示例:

Fill os.Stdin for function that reads from it

Example code for testing the filesystem in Golang