Как подключиться к Oracle в го
Я понял, что есть два способа подключения к Oracle DB в Go (в Windows):
- github.com/tgulacsi/goracle
- github.com/mattn/go-oci8
Но для кого-то моего уровня (новичок в open source+golang) эти два метода / драйвера ужасно хитры.
Это также бремя, которое приходится проходить через все это для развертывания, разработки на разных машинах и т. Д. (Также при условии, что это будет работать).
Есть ли лучший способ подключения к Oracle db в golang или, если его нет, может кто-нибудь объяснить мне в представлении высокого уровня или любом представлении по этому вопросу, которое облегчит это?
Указатели будут очень цениться.
TQ.
1 ответ
Если вам все еще интересно, я работаю с Go и Oracle на Windows уже несколько месяцев. Пока что мой любимый водитель - go-oci8. Это намного быстрее, чем goracle и, кажется, более активен.
Некоторые из наших приложений должны быть развернуты на компьютерах, к которым у нас нет доступа. Оба родных драйвера SQL скомпилированы с приложением без необходимости какой-либо внешней настройки, так что это огромный плюс. На компьютере все еще будет установлен клиент Oracle, но это единственная внешняя зависимость.
Я не буду говорить, что go-oci8 уже готов к работе, но он достаточно стабилен, когда вы знаете его ограничения. Одним из примеров является то, что он паникует при одновременном запуске нескольких программ, поэтому, если вам нужно, вы можете использовать мьютекс.
Я в основном следовал этому руководству, чтобы установить его: https://gist.github.com/mnadel/8678269
Самой сложной частью было создание oci8.pc правильно. Мой это:
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}
Некоторые вещи могут быть избыточными, я мог бы попытаться улучшить это на чистой машине.
Важно помнить, что вы должны использовать одну и ту же архитектуру для Go и клиента Oracle. Поэтому, если вы хотите использовать 64-битную версию Go, вам также понадобится 64-битная версия Oracle. У меня есть как 32-, так и 64-разрядные версии обоих, и хотя по умолчанию используется 64-разрядная версия, я использую bat-файлы для изменения необходимых путей и переменных среды, когда мне нужно создать 32-разрядную версию.
Возможно, стоит потратить некоторое время, чтобы заставить его работать, вы, вероятно, получите гораздо лучшую производительность, чем при использовании ODBC. Я использовал его с несколько большим объемом данных (запросы, которые выбирают более 5 миллионов строк), и он работает очень хорошо.