登录
首页 >  Golang >  Go问答

使用 Golang 编写文件

来源:stackoverflow

时间:2024-03-12 08:30:29 121浏览 收藏

从现在开始,努力学习吧!本文《使用 Golang 编写文件》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我对 golang 相当陌生,还不确定如何使用某些语言结构。目前我有以下代码(带有测试调试输出),但未提供预期结果:

json, _ := json.marshal(struct)
    fmt.println(json)

    f,_ := os.create(fmt.sprintf("/tmp/%s.json", "asd"))

    i,_ := f.write(json)
    fmt.println(i)  

    b, err := ioutil.readall(f)
    fmt.print(b)

我期望出现以下行为:

  • 将结构体转换为字节数组
  • 创建一个新文件
  • 将字节数组附加到文件

但是,当我在我的环境 (aws lambda) 中运行代码以及在 golang 演示中使用它时,该文件始终为空。 上面代码的输出如下所示:

[123 34 ... ]
1384
[]

这让我相信我没有正确使用 f.write() ,尽管我遵循了包文档。所有其他输出都表明预期的行为,那么我的错误是什么?我在使用 file 接口方面受到一定限制,否则我会使用 ioutil.writefile() 。我的假设是在某些时候对指针/值的误解,但编译器阻止了 &f 的使用。


解决方案


f.write() 之后,文件中的当前位置位于文件末尾,因此 ioutil.readall() 将从该位置读取并且不返回任何内容。

您需要先调用f.Sync()确保数据持久保存到磁盘,然后调用f.Seek(0, 0)先回退到文件开头。

更新:从评论来看,您似乎只需要序列化 ​​json 并将其作为 io.reader 转发,因为您实际上并不需要文件,感谢 bytes.Buffer

data, _ := json.Marshal(s)
buf := bytes.NewBuffer(data)
b, _ := ioutil.ReadAll(buf)
fmt.Print(string(b))

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>