找不到Oracle数据库客户端库时避免陷入恐慌

时间:2019-06-04 00:54:41

标签: oracle go oci

我有一个用Go编写的访问Oracle数据库的服务器。工作正常。但是,将有多个实例在不同的位置(当前为2个)运行,其中一些实例不需要访问数据库。 (他们从对等服务器获得传递给他们的相同信息。)

我希望在所有地方都运行相同的可执行文件,但是有些文件将被配置为不使用数据库,因为他们不需要它。问题是,一旦导入OCI程序包,它的init()函数就会被调用,当它无法与数据库对话时会发生恐慌。

在Windows Server 2019上运行GO 1.12.5。

我尝试将OCI.DLL添加到与.EXE相同的目录中,但仍然会死机。

import _ "github.com/mattn/go-oci8"

当我在服务器上运行(没有DB驱动程序)时,出现错误消息:

panic: OCIEnvCreate error

goroutine 1 [running]:
github.com/mattn/go-oci8.init.0()
        D:/Golang/src/github.com/mattn/go-oci8/globals.go:160 +0x130

当我不需要数据库访问权限时,我想避免这种恐慌。我希望使用一个.EXE而不会有条件构建的麻烦。

2 个答案:

答案 0 :(得分:2)

交换到Go goracle driverdelays Oracle client library initialization直到精确地打开连接以处理您的情况(并非所有应用程序用户都连接到Oracle DB)为止。

答案 1 :(得分:0)

正如您所说,将DLL添加到与exe相同的目录下可以解决您的问题,因此,如果您希望单个文件仍然可以工作,则可以让exe在启动时复制所有DLL,甚至删除然后如果需要,什么时候完成。这样,您可以将文件传输到多个位置,但是很可能无法在运行时将其保存为一个文件。