## singleflight.Do 中 shared 参数为何总是返回 true?

## singleflight.do 中 shared 参数为何总是返回 true?

singleflight.Do返回shared参数的问题

使用singleflight.Do第三个参数时遇到了疑惑,为什么返回值shared总是true?

背景

singleflight.Do函数有三个参数:

  • key:用于标识数据库查询
  • do:要执行的函数(在本例中为查询Mysql
  • shared:布尔值,表示查询结果是否在多个调用者之间共享

问题

按照惯例,至少有一个调用者的shared参数应该返回false,因为这是协程独立执行查询的结果。然而,在提供的代码中,shared始终返回true。

解决

问题在于对shared参数的理解。shared表示的是返回的val是否被多个调用者共享,而不是查询本身是否被共享。在给定的代码中,查询是由do函数执行的,而val是查询的结果。

因此,只有当val被多个调用者共享时,shared才会返回true。在本例中,val是在do函数中生成的一个整数。由于do函数是在每个调用者的协程中独立执行的,因此val只有当多个调用者同时执行do函数时才会被共享。

结论

在上面的代码中,由于调用者之间没有并发执行do函数,因此shared始终返回true。如果要获得false,需要确保多个调用者同时执行do函数。

以上就是## singleflight.Do 中 shared 参数为何总是返回 true?的详细内容,更多请关注其它相关文章!