file - 需要在golang中生成运行时二进制编码文件
问题描述
我正在处理需要生成二进制编码(字节)文件的项目。问题是,我不想存储文件,只需要编码数据来验证一些测试数据。
这是我有zip 文件的示例代码
以上示例适用于zip
但我不限于使用zip
或任何文件类型。在这里我们需要存储文件来读取,但我不想稍后存储和删除文件。
我知道寻求帮助并没有太大的努力,但作为一个新手,我只是来了。
谢谢。
解决方案
更好的做法是不依赖具体类型(例如os.File
),而是使用接口来描述您要使用文件的功能。
例如,如果您有一个函数需要一个文件,因为它想从中读取,请io.Reader
改用:
func process(r io.Reader) error {
// ...
}
同样,如果您想写入文件,请使用io.Writer
,或者如果您想同时执行这两项操作,请使用io.ReadWriter
或io.ReadWriteCloser
。您可以将*os.File
值传递给这些函数,因为*os.File
实现了这些接口。
这样做的好处是您可以使用实现接口的任何值调用这些函数。如果你想测试这些函数,你可以传递一个bytes.Buffer
实现io.Reader
和的内存,io.Writer
你可以在运行时手动构造它的内容,例如:
buf := &bytes.Buffer{}
buf.Write([]byte{1, 2, 3})
buf.WriteString("Hello")
这里buf
将包含字节1
、、2
和3
字符串"Hello"
。之后,您可以通过buf
需要读者或作家的地方,例如:
process(buf)
查看类似/相关的问题和示例:
推荐阅读
- c - 使用函数调用其他处理链表的函数的语法?
- node.js - 为什么 CORS 策略会阻止我的 ip 访问我的 API?
- jestjs - 如何监视类属性中的方法?
- optaplanner - Optaplanner 无法将 nearSelection 添加到 subChainSelector
- amazon-web-services - Kafka Connect S3 动态 S3 文件夹结构创建?
- android - 单击单选组 Android Studio 中的单选按钮后启用 EditText
- javascript - 如何正确使用 JSON 将事件/事件源传递给 FullCalendar?
- javascript - 有没有办法使用标签根据 XML 文件检查表的内容
- google-apps-script - 环聊聊天机器人仅适用于 Apps 脚本所有者,不适用于 gSuite 组织中的其他人
- nginx - DigitalOcean 中上传的网站仅在 /var/www/html 下有效