一尘不染

如何在Go中连接到Oracle

go

我收集到有两种方法可以在Windows中(在Windows上)连接到Oracle DB:

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

但是对于我这个级别的人(开源+ golang的初学者)来说,这两种方法/驱动程序非常棘手。

在不同的机器上进行部署,开发等工作时,这也是一个负担(也假设它会工作)。

有没有更好的方法可以在golang中连接到Oracle db,或者如果没有,那么有人可以在高层次的视图或任何对此事进行解释的情况下向我解释吗?

指针将不胜感激。

TQ。


阅读 371

收藏
2020-07-02

共1个答案

一尘不染

如果您仍然感兴趣,我已经在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客户端,应该使用相同的体系结构。因此,如果要使用Go的64位版本,则还需要Oracle的64位版本。我同时具有32位和64位版本,而64位是我的默认设置,当我需要构建32位版本时,我使用bat文件来更改必要的路径和环境变量。

可能值得花一些时间使其工作,您可能会获得比使用ODBC更好的性能。我一直在使用它的数据量较高(查询可提取5+百万行),并且效果很好。

2020-07-02