我认为有两种方法可以在Go中连接到Oracle DB(在Windows上):
但对于某个级别的人(开源+初学者),这两个方法/驱动程序非常棘手。
这也是一个负担,必须经历所有这些,以便在不同的机器上进行部署,开发等。(也假设它会起作用)。
有没有更好的方法在Golang中连接到Oracle数据库,或者如果没有,那么有人可以在高级视图或任何视图中向我解释这会使这更容易吗?
非常感谢指针。
TQ
答案 0 :(得分:9)
如果您仍然感兴趣,我已经在Windows上使用Go和Oracle几个月了。到目前为止,我最喜欢的车手是go-oci8。它比goracle快得多,似乎更活跃。
我们的某些应用程序需要部署在我们无法访问的计算机上。两个本机SQL驱动程序都是使用应用程序编译的,无需任何外部配置,因此这是一个巨大的优势。计算机仍然需要安装Oracle客户端,但这是唯一的外部依赖项。
我不会说go-oci8已经准备就绪,但是当你知道它的局限性时它已经足够稳定了。一个例子是,当同时在多个goroutine上运行时会发生混乱,因此如果您需要,可能需要使用互斥锁。
我基本上按照本教程安装它: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位是我的默认值,当我需要构建32位版本时,我使用bat文件来更改必要的路径和环境变量。
可能值得投入一些时间来使其工作,您可能会比使用ODBC获得更好的性能。我一直在使用它有一些高数据量(获取超过500万行的查询)并且它运行良好。