gpt4 book ai didi

go - 在 handlerfunc 中添加元素到 slice 并作为一个整体返回

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

我正在编写一个服务来学习 Go。我的主要功能可以在下面找到。它首先读取一个 XML 文件并将它们存储在一个 slice 中。我有一个 /rss 端点,它从存储在“数据库”中的项目输出 RSS 提要。这工作正常。我还有一个端点 (/add/{base64}),用于向该 slice 添加新项目。不幸的是我不知道该怎么做。出于某种原因,我需要返回包含添加记录的新 database,以便 /rss 可以使用它。但是如何呢?

我的具体问题是:

  1. 我知道如何向数据库添加记录
  2. 但我不知道如何返回完整的(包括添加的)数据库,以便 /rss 端点能够使用它。所以我想让 rest.AddArticle 返回新数据库,以便 /rss 端点知道添加的项目。

    func main() {
    defer glog.Flush()

    // read database
    database := model.ReadFileIntoSlice()

    // initialise mux router
    r := mux.NewRouter()

    // http handles
    r.HandleFunc("/add/{base64url}", rest.AddArticle(database))
    r.HandleFunc("/rss", rest.GenerateRSS(database))

    // start server
    http.Handle("/", r)
    glog.Infof("running on port %d", *port)
    http.ListenAndServe(":"+strconv.Itoa(*port), nil)
    }

或者是否有其他解决方案可以完成这项工作?我只希望所有包都可以使用 database

最佳答案

据我所知,问题是您正在写入您的数据库,但您正在从缓存版本中读取,因此 rss 的响应不会反射(reflect)发出请求时的模型。如果您查看这段代码;

database := model.ReadFileIntoSlice()

// initialise mux router
r := mux.NewRouter()

// http handles
r.HandleFunc("/add/{base64url}", rest.AddArticle(database))

您不知何故需要修改database 的值。有很多方法可以做到这一点。一些选项是 1) 在某个对象或包级别定义它,然后从定义 AddArticle 的任何地方直接修改它。 2) 刷新你的内存版本,即在返回结果之前,再次从数据库中读取,这样你就可以确保拥有最新的(obv 性能影响) 3) 不要按值传递 database , 使参数成为一个指针。 AddArticle 正在获取 database 的副本,而不是您在 rss 调用中阅读的版本的地址。您可以改为将指针传递给该方法,以便修改原始副本(随着模型变大,它的性能也会大大提高)。

基于你的程序的简单性,我可能会做 3。实际上,2 是一个更强大的解决方案,严肃的企业软件可能需要更多类似的东西(如果你的应用程序是负载平衡的,你的模型就不起作用或者类似的东西)。

关于go - 在 handlerfunc 中添加元素到 slice 并作为一个整体返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037515/

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