我对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
- 1 回答
- 0 关注
- 67 浏览
添加回答
举报
0/150
提交
取消