当前位置: 首页 > 面试题库 >

Redigo Redis Pool是否真的应该是全局变量?

凌波峻
2023-03-14
问题内容

在此处的示例Redigo Docs forPool中,redis池在funcmain中设置为全局变量。这是一种洁净的做事方式吗?您是否应该真正在左右使用全局变量,或者是否有更好,更优选的方法来完成同一件事?


问题答案:

我看到的唯一其他解决方案例如在“将上下文传递给接口方法”中是:

创建一个struct接受嵌入式上下文和我们的handler类型的,并且http.Handler由于,我们仍然满足该接口ServeHTTP

在您的情况下,struct将包括poolhandler功能。

type appContext struct {
    pool Pool
}

type appHandler struct {
    *appContext
    h func(a *appContext, w http.ResponseWriter, r *http.Request) (int, error)
}

func (ah appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
   ...
}


func main() {
    context := &appContext{
        pool:    ...,
        // any other data
    }
}


 类似资料:
  • 问题内容: 考虑以下简单代码: 当child增加myvar时,该值是否与父亲共享(如pthread)? 问题答案: 不,是的。 不,它们不会以程序员可见的任何方式共享;进程可以独立地修改自己的变量副本,并且它们将在不影响其他进程(例如fork()父,兄弟姐妹或后代)的情况下进行更改。 但是,是的,OS实际上最初确实共享页面,因为fork实现了写时复制功能,这意味着只要没有任何进程修改页面,就可以共

  • 问题内容: 我在代码中使用Java Callable Future。以下是我使用future和callables的主要代码- 下面是我的Task类,该类实现Callable接口,我需要根据所拥有的主机名生成URL,然后使用调用SERVERS RestTemplate。如果第一个主机名中有任何异常,那么我将为另一个主机名生成URL,然后尝试拨打电话。 所以我的问题应该声明RestTemplate为静

  • 首先让我说,“记录器”是指任何一类负责向用户或程序员报告诊断或进度信息的对象。根据这个定义,“记录器”将包括图形用户界面上的反馈,如进度条。 我们一再被告知要避免全局状态,尤其是全局可变状态(GMS)。因为伐木者天生是可变的,所以我最近试图让我的伐木者“不是全球性的”。我尝试了各种策略(比如通过构造函数向记录器注入引用)。我终于意识到,所有的方法都是把口红贴在猪身上。 日志记录器必须是所有类(或至

  • 当我在Inno Setup脚本的< code>[Code]部分(Pascal脚本)声明一个全局变量时,它是否自动初始化为零/空值?还是必须显式初始化它(例如在< code>InitializeSetup事件函数中)? 根据我的经验,变量是零初始化的。不过,我不确定我是否只是运气不好。 我已经完成了10.000次测试代码迭代。全局变量(或各种类型、整数、字符串、指针)始终为零初始化。

  • 问题内容: 大家好,我还是新手,我不知道如何使用全局变量。我想将“ this.props.topic.text”设置为全局变量,以在项目的其他应用程序上使用它。我怎样才能做到这一点 ? 问题答案: 这是一个可怕的想法,但是在React中使用全局变量的最好/最简单的方法是将其放在上。在组件中,您可以执行类似的操作,然后通过其他任何地方进行访问。 理想情况下,如果您有数据,并且在可能的状态下,需要在各

  • 问题内容: 在研究一个简单的HTMLElement包装器的想法时,我偶然发现了Internet Explorer和Chrome的以下内容: 对于DOM树中具有ID的给定HTMLElement,可以使用其ID作为变量名来检索div。所以对于像 在Internet Explorer 8 和Chrome中,您可以执行以下操作: 要么 那么,这是否意味着 DOM树中的每个元素都将 转换为全局名称空间中的变