【问题标题】:Multiple Instances of Golang package inside the same program同一程序内的多个 Golang 包实例
【发布时间】:2019-11-04 20:57:19
【问题描述】:

我目前正在研究 Golang,并遇到了一个与包实例化相关的问题。

问题:我们是否可以拥有同一个包的不同实例。

面临的问题:在构建 go 包时,实用程序包(非主)在整个特定构建过程中仅被实例化或编译一次。但是在记录时,出于某种目的,我希望让不同的记录器并行处理不同的包或文件。有什么办法可以让我拥有同一个包的多个实例,这样对每个包所做的更改就不会影响另一个。

注意:我找到了一个很好的解决方法,使用 go-logging 库,我声明了多个记录器,这完全满足了我的需要。所以,我的主要问题是我们是否可以拥有同一个包的不同实例。

感谢回复。

【问题讨论】:

  • 不,你不能。如果一个包有多个副本,程序将无法编译。
  • 不清楚你想达到什么。如果您想要不同的记录器,请创建两个记录器。在 Go 中,你不能动态交换包。尽管使用 Go 模块很容易,但您可以拥有两个版本的包。
  • @georgeok 我认为模块是我正在寻找的。谢谢。

标签: go package instantiation


【解决方案1】:

您可以使用 Go 模块和别名在同一个源文件中导入两个包。当 quote 是标记的 repo 或子模块时,这将起作用。

import (
    "rsc.io/quote"
    quoteV3 "rsc.io/quote/v3"
)

func Hello() string {
    return quote.Hello()
}

func Proverb() string {
    return quoteV3.Concurrency()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多