在找不到 Oracle 数据库客户端库时避免 Go 恐慌

Avoiding Go panic when Oracle Database client libraries not found

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

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

运行 在 Windows Server 2019 上运行 1.12.5。

我尝试将 OCI.DLL 添加到与 .EXE 相同的目录,但它仍然出现错误。

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

当我在服务器上 运行 时(没有数据库驱动程序)我得到错误:

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。

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

时将其保留在一个文件中

切换到 Go goracle driver which delays Oracle client library initialization,直到打开连接以准确处理您的情况,并非所有应用程序用户都连接到 Oracle DB。