go - 在 Golang 中写入文件

标签 go

我对 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 Playground 中使用它时,该文件始终为空。
    上述代码的输出如下所示:
    [123 34 ... <hug array of bytes>]
    1384
    []
    

    这让我相信我正在使用 f.Write()不正确,尽管我遵循了包文档。所有其他输出都表明预期的行为,那么我的错误是什么?我在某种程度上受限于使用 File接口(interface),否则我会选择 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))
    

    关于go - 在 Golang 中写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62040556/

    相关文章:

    go - Curl 因这个 swagger 规范而失败

    string - 将二进制数据从字节数组转换为字符串并返回 golang 是否安全?

    concurrency - 为什么我的并发函数在 Go 中过早退出?

    arrays - 为什么 slice 的容量会变化?不应该是一样的吗?

    postgresql - 无法连接到 postgres(用户密码验证失败 - docker)

    go - Go中的ForkExec和Su问题

    node.js - eclipse 车 : bash: gdb: command not found

    go - 如何解码 PEM 编码的 PKIX 公钥?

    golang 通过 Scanf 打印偶数和奇数

    go - 对同一函数的两次延迟调用会同时执行吗?