2017-06-26 26 views
-4

Go对我来说很新,而且我很努力地只在存在的情况下导入一个包。有没有办法做到这一点?我在包名之前用“_”尝试,但如果包不存在,程序将不会编译。我意识到我可能走错了路,但我还应该如何处理这种情况,在这种情况下,只有在存在包的情况下才想导入包?有条件的进口golang

+0

我确实发现了一个解决方案,将所有这些资源保留在数据库中,而不是导入它们。 – rocoder

+1

这听起来不像一个惯用的Go应用程序...... Go支持插件,可以在运行时导入,但我不确定这是否是您需要的。 –

回答

4

这是Go不可能的。作为一种静态编译语言,如果所有的依赖关系都存在,你只能编译一个二进制文件。 你能给我们一些关于为什么你需要这个的更多细节?也许有一种更简单或更习惯的方式来实现你的想法。

+0

我想建立一个“迷你cms”,其中我想包括用户,日志记录和处理程序与他们等基本模型等。当在另一个应用程序中导入此“cms”时,我希望能够添加到这些模型和处理程序。所以我所做的尝试是从应用程序中导入“mini-cms”某个包,但前提是应用程序存在。我已经强烈怀疑这种方法可行,但我试图找出它应该如何工作 – rocoder

+0

我给你的建议是 - 用抽象(界面)设计你的Go包(库)。因此,设计你的函数和方法来接受简单的接口(最好只有一个或两个方法)并返回接口或结构体。这样,当应用程序导入包时,它将能够使用接口的自定义实现(例如用于日志记录,跟踪或度量等)。库需要与应用程序无关,例如,如果构建对象期望一个'Logger'接口,应用程序没有提供一个 - 使用NoOp记录器。 –