Golang连接Oracle的库有很多,比较常见的如下:

不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置。

1、go-db-oracle

官方介绍:

Oracle Driver using cgo to call OCI libraries from Oracle Instant Client 11. Developed with Linux Status initial: connects, authenticates, basic SELECTs, missing error control, not deallocating memory

关键点: 使用CGO开发的;

基于Oracle 11

基于Linux环境下

2、go-oci8

安装步骤,注意它的安装方式跟之前方式不一样了:之前是 http://wendal.net/459.html 这里提供的步骤, 跟github上安装步骤不一样。以github的为准。

2.1、安装最新版的git,并设置可以从命令行直接调用git命令。

安装方式请看下面这篇文章:

比如我安装的是 Git-1.8.4-preview20130916 这个 版本。

2.2、下载OCI最新版,

存放于C:\instantclient_12_1

OCI是指ORACLE调用接口(Oracle Call Interface),它提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

2.3、下载OCI SDK最新版,

存放于C:\instantclient_11_2\sdk

下载地址仍然是上面地址。

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

2.4、下载MinGW最新版,

MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。(http://www.mingw.org/wiki/Getting_Started)

如果你安装的是MinGW 64 位版本,请参看下面这篇文章:

如果 MinGW是64位, oci 是32 会,编译时会报错:

ld.exe: skipping incompatible C:/instantclient_12_1/oci.dll when searching for -loci

2.5、下载pkg-config.exe和oci8.pc

(已经存放在windows文件夹下,)

将pkg-config.exe复制到C:\mingw\bin\下

将oci8.pc复制到C:\mingw\lib\pkg-config\下

注意,oci8.pc 需要根据你下载的 oci进行修改。下面是我根据我下载的oci版本做的修改。

# Package Information for pkg-config

prefix=C:/instantclient_12_1

exec_prefix=C:/instantclient_12_1

libdir=${exec_prefix}

includedir=${prefix}/sdk/include/

Name: OCI

Description: Oracle database engine

Version: 12.1

Libs: -L${libdir} -loci

Libs.private:

Cflags: -I${includedir}

2.6、修改系统环境变量,

添加

PATH=原有PATH;C:\instantclient_12_1;C:\MinGW\bin;

PKG_CONFIG_PATH=C:\MinGW\lib\pkg-config

2.7、下载相关源码。

执行 go get github.com/wendal/go-oci8

2.8、测试一下:

cd %GOPATH%/src/github.com/wendal/go-oci8/example

go run oracle.go

2.9、配置Oracle连接字符串

在一个目录下新建一个 tnsnames.ora 文件,用于配置连接字符串别名。

ORA10 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = ora10)

)

)

比如我是把这个文件放在 C:\instantclient_12_1\tns 目录下了。

修改全局配置文件,增加一个 TNS_ADMIN 设置 ,指向这个目录。

set TNS_ADMIN=C:\instantclient_12_1\tns

这杨我们连接字符串就可以写成  用户名/密码@实例名

这个包网上看到下面一些问题:

3、goci

作者提供的编译注意事项:

在相关程序中我加了 cgo 编译时需加的头文件和连接库

#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/public

#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_1/lib

您在使用时,请将 /home/oracle/app/oracle/product/11.2.0/client_1 修改为你的

系统中 $ORACLE_HOME 的字串值

如果你使用简易的安装包,请在

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

下载:

oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

并安装和设置oracle环境变量。

同时需设置

export TNS_ADMIN=/home/oracle/app/oracle/product/11.2.0/client_1/network/admin

### ORACLE_HOME 以您系统实际情况进行修改。

参考资料:

参看资料: