Ако все още се интересувате, работя с Go и Oracle на Windows от няколко месеца. Любимият ми драйвер досега е go-oci8. Той е много по-бърз от goracle и изглежда по-активен.
Някои от нашите приложения трябва да бъдат внедрени на компютри, до които нямаме достъп. И двата собствени SQL драйвера се компилират с приложението без необходимост от външна конфигурация, така че това е огромен плюс. Компютърът все още ще се нуждае от инсталиран Oracle клиент, но това е единствената външна зависимост.
Няма да кажа, че go-oci8 все още е готов за производство, но е достатъчно стабилен, когато знаете ограниченията му. Един пример е, че той паникьосва, когато работи на множество goroutines едновременно, така че ако имате нужда от това, може да искате да използвате mutex.
По принцип следвах този урок, за да го инсталирам: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+ милиона реда) и работи много добре.