Golang連接Oracle的庫有很多,比較常見的如下:
不過,oralce 只提供了 oci8 的接口,必須通過它來調用,所以下面方案都逃不過相關設置。
1、go-db-oracle
地址: https://code.google.com/p/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
地址:https://github.com/wendal/go-oci8
它是 https://github.com/mattn/go-oci8 的分支, 增加了windows下中文的安裝說明及相關文件
安裝步驟,注意它的安裝方式跟之前方式不一樣了:之前是 http://wendal.net/459.html 這里提供的步驟, 跟github上安裝步驟不一樣。以github的為准。
2.1、安裝最新版的git,並設置可以從命令行直接調用git命令。
安裝方式請看下面這篇文章:
https://github.com/wohugb/git-reference/blob/master/Getting-Started/Installing-Git.rst
比如我安裝的是 Git-1.8.4-preview20130916 這個 版本。
2.2、下載OCI最新版,
存放於C:\instantclient_12_1
OCI是指ORACLE調用接口(Oracle Call Interface),它提供了一組可對ORACLE數據庫進行存取的接口子例程(函數),通過在代程序設計語言(如C語言)中進行調用可達到存取ORACLE數據庫的目的。
OCI是集成在 Oracle Database Instant Client 的Basic 版本中的。下載地址如下:
http://www.oracle.com/technetwork/database/features/instant-client/index.html
注意,后面你裝的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最新版,
下載地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/ 下載后安裝在C:\mingw。
MinGW全稱Minimalist GNU For Windows,是個精簡的Windows平台C/C++、ADA及Fortran編譯器,相比Cygwin而言,體積要小很多,使用較為方便。MinGW提供了一套完整的開源編譯工具集,以適合Windows平台應用開發,且不依賴任何第三方C運行時庫。(http://www.mingw.org/wiki/Getting_Started)
參考:http://www.cnblogs.com/ghj1976/p/3175591.html
如果你安裝的是MinGW 64 位版本,請參看下面這篇文章:
http://www.cnblogs.com/ghj1976/p/3540257.html
如果 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 文件,用於配置連接字符串別名。
這個文件內容類似如下,參考 http://hi.baidu.com/sunxden/item/f5e1423a9bfc298df4e4ad4b:
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
這楊我們連接字符串就可以寫成 用戶名/密碼@實例名
這個包網上看到下面一些問題:
https://groups.google.com/forum/#!topic/golang-china/4OmCsvqRcKA
3、goci
https://github.com/hlife/goci 它是修改自 https://github.com/egravert/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 以您系統實際情況進行修改。
參考資料:
參看資料:
golang 和 oracle 數據庫編程類庫介紹
http://bbs.mygolang.com/thread-202-1-1.html
golang 在 redhat linux 下如何連接 oracle?
http://www.oschina.net/question/110132_91394
微博上一些相關討論
http://s.weibo.com/weibo/golang%2520oracle&b=1&page=1