我对 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/