如何在Go中连接到Oracle

12
我了解到在Go语言中连接Oracle DB有两种方式(在Windows上):
  1. github.com/tgulacsi/goracle
  2. github.com/mattn/go-oci8
但对于像我这样的初学者,这两种方法/驱动程序都非常棘手。
而且,在部署、在不同的机器上开发等方面,必须经历所有这些过程也是一种负担(还要假设它能正常工作)。
如果没有更好的方法来连接Golang中的Oracle db,那么有人可以用高层次视图或任何视图向我解释吗?这样会更容易吗?
非常感谢您提供指导。

我决定使用ODBC。我尝试了下面这个适配器,目前为止它工作得完美。链接: https://github.com/weigj/go-odbc - himekami
1个回答

9
如果您仍然感兴趣,我已经使用Go和Oracle在Windows上工作了几个月。到目前为止,我最喜欢的驱动程序是go-oci8。它比goracle快得多,并且似乎更加活跃。
我们的一些应用程序需要部署在我们无法访问的计算机上。两个本地SQL驱动程序都已编译到应用程序中,无需任何外部配置,这是一个巨大的优势。计算机仍需要安装Oracle客户端,但这是唯一的外部依赖项。
我不会说go-oci8已经准备好用于生产,但当您了解它的限制时,它已经足够稳定。一个例子是当同时在多个goroutine上运行时,它会发生panic,因此如果您需要使用互斥锁,您可能需要使用它。
我基本上按照这个教程进行安装: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更好的性能。我一直在使用它处理相当大的数据量(查询获取5+百万行),并且它表现非常良好。


感谢您的帮助。我在过去几个月里暂停了对Go语言的工作,现在成为了一名.NET程序员。 - himekami
你能提供一份示例代码吗?很抱歉,我完全是Go的新手,无法在其他地方找到它。 - Aditya Peshave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接