Go語(yǔ)言連接Oracle數(shù)據(jù)庫(kù)的方法
首先交代一下運(yùn)行環(huán)境和工具版本:
WIN10
MINGW64
ORACLEINSTANCCLIENT_18_3 x64
Jetbrins Goland
編譯階段:
1. exec: "gcc": executable file not found in %PATH%
2. exec: "pkg-config": executable file not found in %PATH%
3. cannot use (**_Ctype_struct_OCIServer)(unsafe.Pointer(&conn.svc))
(type **_Ctype_struct_OCIServer) as type **_Ctype_struct_OCISvcCtx
in argument to func literal
運(yùn)行階段:
1. Process finished with exit code -1073741701 (0xC000007B)
2. exit status 3221225595
開(kāi)始
一、下載ORACLEINSTANCCLIENT 和對(duì)應(yīng)的SDK
下載地址:https://www.oracle.com/technetwork/topics/winx64soft-089540.html
我選用了18.3 x64的版本,能向下兼容,不用擔(dān)心
注意basic版本和sdk都需要下載下來(lái),一共是兩個(gè)文件
下載之后先解壓basic壓縮包,然后將sdk解壓到basic目錄下:
添加如下環(huán)境變量到系統(tǒng)PATH變量:(按自己的情況添加)
二、下載安裝MINGW64
主要是解決WIN中沒(méi)有GCC的問(wèn)題
如果不安裝后期會(huì)出現(xiàn)問(wèn)題:(exec: "gcc":executable file not foundin %PATH%)
因?yàn)橹跋螺d的ORACLEINSTANCCLIENT是64位的所以我們也需要下載MINGW64才能編譯
下載地址:https://sourceforge.net/projects/mingw-w64/files/
注意,第一個(gè)是在線安裝程序,較慢,建議直接下載7z壓縮包。解壓即可
解壓之后,添加如下環(huán)境變量到PATH:(按自己的情況添加)
三、獲取GO-OCI8驅(qū)動(dòng)
執(zhí)行命令:go get github.com/wendal/go-oci8
會(huì)報(bào)一個(gè)錯(cuò)誤:pkg-config: exec: "pkg-config": executable file not found in %PATH%
先忽略,后面會(huì)解決
四、修改OCI8.PC
進(jìn)入GOPATH目錄,找到OCI8.PC文件,打開(kāi),修改 紅色框的部分(按你自己的情況)
%GoPath%\src\github.com\wendal\go-oci8\windows
然后:
1.復(fù)制此目錄下pkg-config.exe到mingw64下的bin目錄
2.復(fù)制此目錄下oci8.pc到mingw64下的lib/pkg-config目錄(pkg-config目錄需要自己建)
添加如下(PKG_CONFIG_PATH)環(huán)境變量:(按自己情況)
五、最后一步
執(zhí)行命令:go get github.com/wendal/go-oci8
此時(shí)執(zhí)行這個(gè)操作
應(yīng)該已經(jīng)沒(méi)有(pkg-config: exec: "pkg-config": executable file not found in %PATH%)這個(gè)錯(cuò)誤了,如果還有,就是上一步你做的不太對(duì)。
但是,還會(huì)有新的錯(cuò)誤出現(xiàn),如下:
不要慌
打開(kāi)GOPATH目錄下,oci8.go文件
路徑:%GoPath%\src\github.com\wendal\go-oci8
此文件中四處OCIServer為OCISvcCtx
再次?。。?!
執(zhí)行命令:go get github.com/wendal/go-oci8
可以了,完事兒。
讓我們上一段代碼,測(cè)試一下:
package main import ( "database/sql" "fmt" "log" "os" _ "github.com/wendal/go-oci8" ) func query() { os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8") log.SetFlags(log.Lshortfile | log.LstdFlags) db, err := sql.Open("oci8", "j1_bibox/oracle123@10.1.196.200:1521/zjdevdb") if err != nil { log.Fatal(err) } defer db.Close() rows, err := db.Query("select * from v$version") if err != nil { log.Fatal(err) } cols, _ := rows.Columns() rawResult := make([][]byte, len(cols)) result := make([]string, len(cols)) dest := make([]interface{}, len(cols)) for i := range rawResult { dest[i] = &rawResult[i] } for rows.Next() { err = rows.Scan(dest...) for i, raw := range rawResult { if raw == nil { result[i] = "" } else { result[i] = string(raw) } } fmt.Printf("%s\n", result[0]) } rows.Close() } func main() { query() }
走你
就是這么刺激,還是錯(cuò)?。。。。?????
現(xiàn)在不要慌,冷靜一點(diǎn),分析情況
首先,如果你的代碼在IDE中運(yùn)行,會(huì)報(bào)錯(cuò)如下:
如果你不信這個(gè)邪,在cmd中運(yùn)行,會(huì)報(bào)錯(cuò)如下:
以管理員模式運(yùn)行
IDE中也可以這樣解決問(wèn)題:
轉(zhuǎn)載:https://www.cnblogs.com/jiangyuqin/p/10135963.html
到此這篇關(guān)于Go語(yǔ)言連接Oracle數(shù)據(jù)庫(kù)的方法的文章就介紹到這了,更多相關(guān)Go語(yǔ)言連接Oracle內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang監(jiān)聽(tīng)文件變化的實(shí)例
這篇文章主要介紹了golang監(jiān)聽(tīng)文件變化的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03一文帶你輕松學(xué)會(huì)Go語(yǔ)言動(dòng)態(tài)調(diào)用函數(shù)
這篇文章主要是帶大家學(xué)習(xí)一下Go語(yǔ)言是如何動(dòng)態(tài)調(diào)用函數(shù)的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考下2022-11-11Go用兩個(gè)協(xié)程交替打印100以?xún)?nèi)的奇偶數(shù)的方法詳解
這篇文章主要給大家詳細(xì)介紹了Go用兩個(gè)協(xié)程交替打印100以?xún)?nèi)的奇偶數(shù)的示例代碼,文中給大家介紹了兩個(gè)實(shí)現(xiàn)方法,使用無(wú)緩沖的channel和設(shè)置GOMAXPROCS=1,介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08golang 項(xiàng)目打包部署環(huán)境變量設(shè)置方法
最近將 golang 項(xiàng)目打包部署在不同環(huán)境,下面分享一下我的心得體會(huì),對(duì)golang 項(xiàng)目打包部署環(huán)境變量設(shè)置方法感興趣的朋友一起看看吧2024-07-07Go語(yǔ)言之io.ReadAtLeast函數(shù)的基本使用和原理解析
io.ReadAtLeast函數(shù)是Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供的一個(gè)工具函數(shù),能夠從數(shù)據(jù)源讀取至少指定數(shù)量的字節(jié)數(shù)據(jù)到緩沖區(qū)中,這篇文章主要介紹了io.ReadAtLeast函數(shù)的相關(guān)知識(shí),需要的朋友可以參考下2023-07-07Golang的Fork/Join實(shí)現(xiàn)代碼
Fork/Join本質(zhì)上是一種任務(wù)分解,將一個(gè)很大的任務(wù)分解成若干個(gè)小任務(wù),然后再對(duì)小任務(wù)進(jìn)一步分解,直到最小顆粒度,然后并發(fā)執(zhí)行,對(duì)Golang的Fork/Join實(shí)現(xiàn)代碼感興趣的朋友跟隨小編一起看看吧2023-01-01學(xué)會(huì)提升Go語(yǔ)言編碼效率技巧拒絕加班!
這篇文章主要為大家介紹了Go語(yǔ)言編碼效率提升技巧詳解,學(xué)會(huì)了從此拒絕加班,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12