问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教golang连接oracle11g的方法,有没有可用的ORM

发布网友 发布时间:2022-05-02 16:50

我来回答

2个回答

懂视网 时间:2022-05-02 21:11

倒腾了半天终于连接好了

Go都出来这么多年了

还没有个Oracle的官方驱动。。。

过程真的很蛋疼。。一度想放弃直接连ODBC

首先交代一下运行环境和工具版本:

WIN10

MINGW64

ORACLE INSTANCCLIENT_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

 

运行阶段:

 

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%srcgithub.comwendalgo-oci8windows

技术分享图片

然后:

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%srcgithub.comwendalgo-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/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
", result[0])
 }
 rows.Close()
}

func main() {
 query()
}

走你

就是这么刺激,还是错!!!!?????

现在不要慌,冷静一点,分析情况

首先,如果你的代码在IDE中运行,会报错如下:

技术分享图片

技术分享图片

 

如果你不信这个邪,在cmd中运行,会报错如下:

技术分享图片

然后你拿着报错信息,去找度娘,有人会告诉你,你的instanceclient版本不对,然后你就不停的换版本,换版本,换版本

然后发现卵用没有

对,那个人就是我,=_=???????

现在!!我现在!!告诉你!!

真相只有一个!!!!!!!!

那就是:以管理员模式运行

技术分享图片

来到这,无数次失败,无数次尝试最后获得成功的激动,瞬间就把你点燃。

恐怕这就是计算机世界吸引我的地方吧。

IDE中也可以这样解决问题:

技术分享图片

 

 最后的最后,让我们给这段代码加个注释:

 技术分享图片

最后的最后的最后,如有指教,请留言。

Go语言连接Oracle(就我这个最全)

标签:第一个   打开   iter   综合   process   ann   file   []   pointer   

热心网友 时间:2022-05-02 18:19

我最早使用的语言是Java和Python, 并且一直都对Python充满好感, 我喜欢这种很朴实和高效率的感觉, 但我却最后没有采用Python,原因其实也很简单, 我就是不喜欢缩进语法, 就跟很多人换工作仅仅是为了屏幕更大一点一样, 另外就是有了同样很棒的可选方案, 这就是Ruby, 所以我最终采用了Ruby作为主力编程语言, 同样也为不能使用Python而有一点小遗憾,毕竟Python的健壮性比Ruby好很多,只不过Ruby也一直在进步, 所以这一点无伤大雅

  我们都知道,无论是Python还是Ruby,甚至Java, 都是在解决业务层的问题, 属于应用型语言, 以解决业务逻辑为主, 但还有一个领域是系统领域,偏网络层和底层操作,在这一块我一直在寻找一种优雅的方案, C++被我首先给淘汰掉了, C的开发效率太低, Java倒是比较合适, 就是太臃肿,而且缺少系统编程的基因,毕竟它是企业级开发出身的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 Windows10怎么调出来显示卡属性和显示卡选项啊?玩打游戏不调高性能卡的不行 高龄老人长期只吃汤圆坏处? 吃汤圆吃多了会死人吗 小朋友吃汤圆的危害 描写动物的形态的四字成语? 形容“形状”的四字词语有哪些? 形态的四字词语 描写形态的四字成语 表示形态的四字成语? 关于形状形态的四字词语 描写形态的四字词语 形容形态各异的四字词语? 描写人物形态的四字词语 描写“形态”的四字词语有哪些? 关于形态的四字词语 兄弟姐妹间在赡养老人问题出现问题 形态的四字词语有哪些 以前自己兄弟姐妹和老人签订得赡养协议可以做法律依据吗?现在老人提出解除协议可以吗? 赡养老人子女责任划分 表示形态的四字成语 右键没有显示卡属性了? oppor17还是vivox23好呢 桌面鼠标右键有一个显示卡属性。怎么办? 怎么去掉桌面右键的显示卡属性和配置可交换显示卡?谢谢啦 步骤三点击桌面右键空白没有显示卡属性设置啊? win7显示卡属性在哪里?怎么设置?CF不能全屏! 电脑win7显示卡的属性在哪儿 如何删除鼠标右键的“显示卡属性”和“配置可交换显示卡”? 怎么在电脑上察看显示卡属性 显示卡属性打不开 右键显示卡属性是英文的,看不懂,怎么弄成中文的。 鼠标右键有了显示卡属性和配置可交换显示卡怎么删除 在桌面右键点击没有显示卡属性和配置可交换显示卡 如何在UEFI+GPT环境下安装windows server 2008 r2 UEFI+GPT环境 光盘安装windows server 2008 r2 如何在GPT分区下安装win7或2008 r2 请问如何激活 GPT 分区的 Windows Server 2008 R2? 关于Windows Server 2008 + GPT分区格式 win2008r2安装卡第一屏 安装windows2008R2磁盘格式已改成gpt格式还提示windows无法安装到这个磁盘.选中磁盘采用GPT分区形式