go函数在一个http过程中被多次调用,如果避免多次执行

fancyecommerce · · 2021 次点击
`gin.Context`是针对单个请求的上下文,可以保证一个`x`对应一个请求,单个请求内多个中间件的调用是没问题的。如果你这个`goo`多个相同的输入产出的都是相同的结果并且计算比较耗时,就可以优化一下,把计算出来的值用`map`缓存一下,`st`作为键,`goo`里面计算前获取一下,如果有直接返回,这样多次请求都能共享计算结果,当然前提就是看这个`goo`是不是只依赖`st`这个外部参数的,还有如果计算不耗时和调用不密集就没有优化的必要了。
#11
更多评论
如果是php,我可以存储到对象变量里面,各个PHP http 是不会影响的 go,貌似函数外部的包变量,每次http访问,都是可以相互访问的。
#1
难道解决的方式,就是http 请求要结束的事情,清空变量x的值?这样应该也不行 ``` var x int64 func goo(st string) int64{ if x !=0 { return x } if st == "A" { x := 1+2+3+...+100000 // 这里是一系列的计算 } else { x := 1+2+3+...+200000 // 这里是一系列的计算 } return x // 这里是一些逻辑,计算的值赋值给result } ```
#2