为了账号安全,请及时绑定邮箱和手机立即绑定

设置每小时查询一次数据库以刷新其数据的戈兰 API

设置每小时查询一次数据库以刷新其数据的戈兰 API

Go
MMMHUHU 2022-09-12 20:54:55
我对golang来说相对较新,可以使用一些关于如何构建它的高级提示。我正在尝试构建一个 REST API:用户将通过 POST 方法提供一个小的 JSON 有效负载API 将用户的输入数据与存储为结构切片的引用数据集进行比较,并计算值此值将返回给用户每小时都会查询一个数据库,并将结构块数据集替换为另一个结构块数据集。基本上,这会刷新参考数据我希望这个令人耳目一新的工作是异步的,这样它就不会减慢用户体验我使用的是高浪的 Echo 框架(https://echo.labstack.com/)。这是我在类似戈兰的伪代码中的尝试。您将如何构建此 API 以每小时刷新数据异步?为了澄清,我卡在上的部分是“在后台每小时查询一次数据库异步”位。我不确定如何做到这一点。func main() {    e := echo.New()    e.POST("/", func(something) {                // This func queries the DB and saves reference dataset result as a slice of structs        dataset := refreshDB()         // Does some calculations on input JSON data and reference dataset        result := doCalcs(inputJSON, dataset)        // Prep response in neat JSON        responseForUser := prepOutput(result)        return responseForUser        })    }
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

对于 Go 中的异步代码,您可以使用 goroutine,要定期执行代码,可以使用股票代码。


package main


import (

    "fmt"

    "time"

    "sync"

)


var rwm sync.RWMutex

var sliceOfStructs []struct{/* ... */}


func main() {

    go func() {

        tick := time.NewTicker(time.Hour)

        for range tick.C {

            rwm.Lock()

            sliceOfStructs = []struct{}{ /* refresh with new data */ }

            rwm.Unlock()

        }

    }()

    

    // start server

}

如果需要跨多个包进行访问,则需要将其导出并将其移动到非主包,即可以导入的包。并对 执行相同的操作。sliceOfStructsrwm

确保读取的任何代码在读取之前和完成时都会调用。sliceOfStructsrwm.RLockrwm.RUnlock

如果您有多个需要编写的戈鲁廷,则应从 更改为 。sliceOfStructsrwmsync.RWMutexsync.Mutex


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号