【发布时间】:2021-06-01 11:47:54
【问题描述】:
假设我有一个昂贵的功能
func veryExpensiveFunction(int) int
这个函数会被同一个号码调用很多次。
是否有一种好方法可以让该函数存储以前的结果以在再次调用该函数时使用,甚至可能对veryExpensiveFunction2 可重用?
显然,可以添加一个参数
func veryExpensiveFunctionCached(p int, cache map[int]int) int {
if val, ok := cache[p]; ok {
return val
}
result := veryExpensiveFunction(p)
cache[p] = result
return result
}
但是现在我必须在某个我不关心它的地方创建缓存。如果可能的话,我宁愿将它作为“静态函数成员”。
在go中模拟静态成员缓存的好方法是什么?
【问题讨论】:
-
只需使用包级映射或类似的。
-
@Beginner 请检查我的答案,因为它还处理并发竞争条件等。
-
@Peter 那将是一个包全局变量,对吧?我更喜欢在我的函数中使用本地的东西。我如何为此证明一个全局变量?
-
@EduardHasanaj 是的,我投了赞成票。我正在测试实现。为什么这么着急?
-
在计算机科学中这称为Memoization。使用这个词进行搜索应该会带来有趣的结果。
标签: go memoization