在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
首先交代一下运行环境和工具版本: WIN10 MINGW64 ORACLE INSTANCCLIENT_18_3 x64 Jetbrins Goland 编译阶段: 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 运行阶段: 1. Process finished with exit code -1073741701 (0xC000007B) 2. exit status 3221225595 开始 一、下载ORACLE INSTANCCLIENT 和对应的SDK下载地址:https://www.oracle.com/technetwork/topics/winx64soft-089540.html 我选用了18.3 x64的版本,能向下兼容,不用担心 注意basic版本和sdk都需要下载下来,一共是两个文件 下载之后先解压basic压缩包,然后将sdk解压到basic目录下: 添加如下环境变量到系统PATH变量:(按自己的情况添加) 二、下载安装MINGW64主要是解决WIN中没有GCC的问题 如果不安装后期会出现问题:(exec: "gcc": executable file not found in %PATH%) 因为之前下载的ORACLE INSTANCCLIENT是64位的所以我们也需要下载MINGW64才能编译 下载地址:https://sourceforge.net/projects/mingw-w64/files/ 注意,第一个是在线安装程序,较慢,建议直接下载7z压缩包。解压即可 解压之后,添加如下环境变量到PATH:(按自己的情况添加) 三、获取GO-OCI8驱动执行命令:go get github.com/wendal/go-oci8 会报一个错误:pkg-config: exec: "pkg-config": executable file not found in %PATH% 先忽略,后面会解决 四、修改OCI8.PC 进入GOPATH目录,找到OCI8.PC文件,打开,修改 红色框的部分(按你自己的情况) %GoPath%\src\github.com\wendal\go-oci8\windows 然后: 1.复制此目录下pkg-config.exe到mingw64下的bin目录 2.复制此目录下oci8.pc到mingw64下的lib/pkg-config目录(pkg-config目录需要自己建)
添加如下(PKG_CONFIG_PATH)环境变量:(按自己情况) 五、最后一步执行命令:go get github.com/wendal/go-oci8 此时执行这个操作 应该已经没有(pkg-config: exec: "pkg-config": executable file not found in %PATH%)这个错误了,如果还有,就是上一步你做的不太对。 但是,还会有新的错误出现,如下: 不要慌 打开GOPATH目录下,oci8.go文件 路径:%GoPath%\src\github.com\wendal\go-oci8 此文件中四处OCIServer为OCISvcCtx
再次!!!! 执行命令:go get github.com/wendal/go-oci8 可以了,完事儿。 让我们上一段代码,测试一下: 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/[email protected]: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() } 走你 就是这么刺激,还是错!!!!????? 现在不要慌,冷静一点,分析情况 首先,如果你的代码在IDE中运行,会报错如下: 如果你不信这个邪,在cmd中运行,会报错如下: 以管理员模式运行
IDE中也可以这样解决问题:
转载:https://www.cnblogs.com/jiangyuqin/p/10135963.html |
请发表评论