Как подключиться к Oracle в go

Я полагаю, есть два способа подключения к Oracle DB в Go (в windows):

  1. github.com/tgulacsi/goracle
  2. github.com/mattn/go-oci8

но для кого-то моего уровня (Новичок в open source+golang) эти два метода/драйвера ужасно сложны.

Это также бремя, которое нужно пройти через все это для развертывания,разработки на разных машинах и т. д. (Также предполагая, что это сработает).

есть лучший способ подключения к Oracle db в golang или если нет, то может ли кто-нибудь объяснить мне в представлении высокого уровня или любом представлении, что облегчило бы это?

указатели были бы очень признательны.

TQ.

1 ответов


Если вы все еще заинтересованы, я работаю с Go и Oracle в Windows в течение нескольких месяцев. Мой любимый драйвер до сих пор go-oci8. Это намного быстрее, чем goracle и, кажется, быть более активными.

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

Я не скажу, что go-oci8 готов к производству, но он достаточно стабилен, когда вы знаете его ограничения. Одним из примеров является то, что он паникует при работе на нескольких goroutines одновременно, поэтому, если вам нужно, вы можете использовать мьютекс.

Я в основном следовал этому руководству, чтобы установить его:https://gist.github.com/mnadel/8678269

самой сложной частью было создание oci8.pc corretly. Шахта есть:

prefix=/devel/target/1.0
exec_prefix=${prefix}
libdir=C:/oracle/instantclient_12_1_64/sdk/lib/msvc
includedir=C:/oracle/instantclient_12_1_64/sdk/include
oralib=C:/oracle/instantclient_12_1_64/sdk/lib/msvc
orainclude=C:/oracle/instantclient_12_1_64/sdk/include
gcclib=c:/MinGW_64/mingw64/lib
gccinclude=c:/MinGW_64/mingw64/lib
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: oci8
Version: 12.1
Description: oci8 library
Libs: -L${oralib} -L${gcclib} -loci
Libs.private:
Cflags: -I${orainclude} -I${gccinclude}

некоторые вещи могут быть reduntant, я мог бы попытаться улучшить его на чистой машине.

важно иметь в виду, что вы должны использовать одну и ту же архитектуру для Go и клиента Oracle. Поэтому, если вы хотите использовать 64-разрядную версию Go, вам также понадобится 64-разрядная версия Oracle. У меня есть как 32, так и 64-разрядные версии обоих, и хотя 64-разрядный мой по умолчанию, я использую файлы bat для изменения необходимых путей и переменных среды, когда мне нужно собрать 32-битную версию.

возможно, стоит потратить некоторое время, чтобы заставить его работать, вы, вероятно, получите гораздо лучшую производительность, чем с помощью ODBC. Я использую его с несколько большим объемом данных (запросы, которые приносят 5+ миллион строк), и он работает очень хорошо.