Hvis du stadig er interesseret, har jeg arbejdet med Go og Oracle på Windows i et par måneder nu. Min favorit driver indtil videre er go-oci8. Det er meget hurtigere end goracle og ser ud til at være mere aktivt.
Nogle af vores applikationer skal installeres på computere, som vi ikke har adgang til. Begge native SQL-drivere er kompileret med applikationen uden behov for nogen ekstern konfiguration, så det er et stort plus. Computeren skal stadig have Oracle-klienten installeret, men det er den eneste eksterne afhængighed.
Jeg vil ikke sige, at go-oci8 er produktionsklar endnu, men den er stabil nok, når du kender dens begrænsninger. Et eksempel er, at den går i panik, når den kører på flere goroutiner samtidigt, så hvis du har brug for det, vil du måske bruge en mutex.
Jeg har stort set fulgt denne vejledning for at installere den:https://gist.github.com/mnadel/8678269
Den sværeste del var at oprette oci8.pc korrekt. Min er:
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}
Nogle ting kan være overflødige, jeg kan prøve at forbedre det på en ren maskine.
En vigtig ting at have i tankerne er, at du skal bruge den samme arkitektur til Go og Oracle-klienten. Så hvis du vil bruge 64 bit versionen af Go, skal du også bruge 64 bit versionen af Oracle. Jeg har både 32 og 64 bit versioner af begge, og mens 64 bit er min standard, bruger jeg bat-filer til at ændre de nødvendige stier og miljøvariabler, når jeg skal bygge en 32 bit version.
Det kan være værd at investere lidt tid for at få det til at virke, du vil sandsynligvis få meget bedre ydeevne end at bruge ODBC. Jeg har brugt det med noget højt datavolumen (forespørgsler, der henter 5+ millioner rækker), og det fungerer meget godt.