gpt4 book ai didi

file - 如何验证文件是否包含要从 Go 中的 ioutil.ReadFile 编码的内容

转载 作者:数据小太阳 更新时间:2023-10-29 03:15:24 24 4
gpt4 key购买 nike

我正在尝试使用文件而不是数据库来启动和运行原型(prototype)。我有一个程序 (1) 从文件中读取现有内容到 map ,(2) 采用 JSON POST 将内容添加到 map ,(3) 在退出时写入文件。

首先,文件没有被创建。然后我创建了一个空文件。它没有被写入。我正在尝试读取文件,确定是否存在现有内容。如果没有现有内容,请创建一个空白 map 。如果存在现有内容,请将其解码到新 map 中。

  func writeDB() {
eventDBJSON, err := json.Marshal(eventDB)
if err != nil {
panic(err)
}

err2 := ioutil.WriteFile("/Users/sarah/go/dat.txt", eventDBJSON, 0777)
if err2 != nil {
panic(err2)
}
}

func main() {

dat, err := ioutil.ReadFile("/Users/sarah/go/dat.txt")
if err != nil {
panic(err)
}
if dat == nil {
eventDB = DB{
events: map[string]event{},
}
} else {
if err2 := json.Unmarshal(dat, &eventDB); err2 != nil {
panic(err2)
}
}

router := httprouter.New()
router.POST("/join", JoinEvent)
router.POST("/create", CreateEvent)

log.Fatal(http.ListenAndServe(":8080", router))

defer writeDB()

}

最佳答案

服务器无法到达 defer writeDB()

http.ListenAndServe block ,如果它确实返回任何东西,你记录。致命的,它会在那时退出你的应用程序。

您无法拦截应用程序退出、收到 SIGKILL、机器断电等的所有方式。

我假设你真的只是想写一些代码,反弹服务器,重复

如果是这样的话,那么 Ctrl-C 就足够了。

如果您想在 Ctrl-C 上写入文件,请查看 signal包。

此外,在函数的最后一行延迟确实没有任何意义,因为延迟基本上意味着“最后执行”。

关于file - 如何验证文件是否包含要从 Go 中的 ioutil.ReadFile 编码的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36684061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com