【问题标题】:How to connect to Oracle in gogo中如何连接Oracle
【发布时间】:2014-04-08 16:28:19
【问题描述】:

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

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

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

在不同机器上进行部署、开发等所有这些过程也是一种负担。(也假设它会起作用)。

有没有更好的方法在 golang 中连接到 Oracle db,或者如果没有,那么有人可以在高级视图或任何可以使这更容易的视图中向我解释吗?

我们将不胜感激。

TQ。

【问题讨论】:

  • 我决定改用 ODBC。我已经在下面尝试过这个适配器,到目前为止它工作得很好。链接:github.com/weigj/go-odbc

标签: windows oracle go cx-oracle oci8


【解决方案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 客户端使用相同的架构。因此,如果您想使用 64 位版本的 Go,您还需要 64 位版本的 Oracle。我有 32 位和 64 位版本,虽然 64 位是我的默认设置,但当我需要构建 32 位版本时,我使用 bat 文件来更改必要的路径和环境变量。

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

【讨论】:

  • 感谢您的帮助。在过去的几个月里,我已经暂停了工作。找到了一份 .NET 程序员的工作。
  • 能否提供示例代码?很抱歉,我对 Go 完全陌生,我无法在其他任何地方找到它。
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2013-03-19
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多