Как избежать паники, если клиентские библиотеки Oracle Database не найдены - PullRequest
1 голос
/ 04 июня 2019

У меня есть сервер, написанный на Go, который обращается к базе данных Oracle.Работает нормально.Тем не менее, будет несколько экземпляров, работающих в разных (в настоящее время 2) местах, некоторым из которых не требуется доступ к базе данных.(Они получают одинаковую информацию, передаваемую им от своих одноранговых серверов.)

Я хочу, чтобы один и тот же исполняемый файл выполнялся во всех местах, но некоторые из них будут настроены так, чтобы не использовать базу данных, поскольку им это не нужно.Проблема в том, что после импорта пакета OCI вызывается его функция init (), которая паникует, когда не может связаться с базой данных.

Запуск GO 1.12.5 на Windows Server 2019.

Я пытался добавить 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 без путаницы условных сборок.

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Замена на драйвер Go goracle , который задерживает инициализацию клиентской библиотеки Oracle до тех пор, пока не будут точно установлены соединения, чтобы справиться с вашей ситуацией, когда не все пользователи приложения подключаются к БД Oracle.

0 голосов
/ 04 июня 2019

Как вы сказали, добавление DLL в тот же каталог, что и exe-файл, решает вашу проблему, поэтому, если вы хотите, чтобы один файл все еще работал, вы можете получить exe-копию всех DLL-файлов при запуске и даже удалить затемкогда это будет сделано, если вы хотите.Таким образом, вы можете перенести файл в несколько мест, но, скорее всего, нет способа сохранить его одним файлом во время работы.

...