背景

在Go1.10 之后golang不再支持 Windows XP操作系统

见 Go 1.10 Release Notes https://go.dev/doc/go1.10


Golang在1.11增加了模块管理功能mod,让使用和应用三方模块变得更加简单和方便。

环境搭建

为了编译能够支持XP操作系统的程序,需要下载Go1.10的SDK,并且使用GOPATH的方式进行包管理。

通过GO官方提供的历史归档下载,来下载go1.10 https://go.dev/dl/

在页面最下方找到归档的版本,然后找到1.10进行下载


由于我的电脑已经安装了GO1.17,这里我下载压缩包,通过解压和手动配置GOPATH的方式在使用这个SDK

原生模块管理

Go1.10 使用原生的模块管理方式也就是使用GOPATH,这种模式下我们需要注意:

  • 所有的三方包都以源码的方式放到GOPATH/src下面。
  • 当我们使用go get安装三方包时候时候,就是将这些包的源码下载到这个目录中。
  • 我们在创建我们自己的项目时候,也需要将我们的项目放在这个目录下,这样我们项目中的各个包才能够正确的相互调用。

由于我默认环境是1.17,这里需要手动设置GOPATH为一个自定义的路径,我手动创建一个在D:\go1.10.windows-amd64\gopath的目录作为GOPATH。

这里以GoLand为例进行配置示例,创建一个项目gopath

  • 注意项目保存目录一定要在我们创建的那个GOPATH中的src目录下
  • 选择 Go(GOPATH)
  • 选择GO 1.10 的SDK

创建完成后我们手动配置一下项目的GOPATH路径

  • 在项目GOPATH中添加刚才创建的目录D:\go1.10.windows-amd64\gopath
  • 取消使用系统环境中的目录


关闭默认开始的Go Modules

简单添加一些代码进行包之间的导入运行测试。

Vendor模块管理

在1.5之后Golang支持使用Vendor作为模块管理,Vendor优点:

  • 项目里可以使用与GOPATH中不同版本的三方库
  • 可以系统的管理目前项目使用到的三方库

vendor的管理方式与npm很相似,通过维护一个名为vendor.json,该文件内维护三方库的版本信息。

vender会在项目中创建一个名为vendor的目录,用于存放三方包,也就是项目自己的GOPATH

目前由于Golang 11之后的mod非常好用,vendor已经停止维护,最后一个版本为1.9.0

https://github.com/kardianos/govendor/tree/v1.0.9

安装Vendor

go get -u github.com/kardianos/govendor

安装完成后可以验证一下

注意vendor的使用同样需要我们将项目放置与GOPATH/src中。

以刚才的mylib为例,首先初始化vendor

govendor init

该操作会在项目中生成一个名为 vendor的目录,并且创建一个vendor.json文件描述了项目的信息以及依赖的包。

接下来添加一个三方库,以github.com/natefinch/lumberjack举例

govendor fetch github.com/natefinch/lumberjack@v2.0.0

如果需要拉取的是指定版本,那么在@后面增加相关的commit idtag就可以。

下载安装完成后,我们就可以在vendor目录中看到这个包,相应的在vendor.json文件中也会多一条关于这个包信息。

接下来就可以在代码中使用三方的库了。

一个新的vendor进行管理的项目,可以使用下面命令下载相关依赖包

govendor sync

常见问题

Error: repo remote not secure

如果你正在使用的私有仓库没有使用https而是http那么在运行govendor fetch时候可能发生

Error: repo remote not secure
github.com/kardianos/govendor/context.(*Context).AlterD:/go1.10.windows-amd64/gopath/src/github.com/kardianos/govendor/context/modify.go:712D:/go1.10.windows-amd64/gopath/src/github.com/kardianos/govendor/run/modify.go:152
github.com/kardianos/govendor/run.(*runner).runD:/go1.10.windows-amd64/gopath/src/github.com/kardianos/govendor/run/run.go:98

这需要使用额外的insecure 参数来许可vendor拉取不安全的包

govendor fetch -insecure [你的项目HTTP Git地址]

缺包

vendor默认,情况下只会拉取目的地址的根路径下的文件,如果三方库含有复杂的包结构,那么会出问题,因此我们需要拉取整个项目,这个时候需要使用tree参数表示拉取整个项目。

govendor fetch -tree [你的项目HTTP Git地址]

参考文献

[1]. govendor . 2017.10 . https://github.com/kardianos/govendor/tree/v1.0.9
[2]. 掘金 . Go Vendor 使用指南 . 零度David . 2020.08 . https://juejin.cn/post/6860377811488604168

Go XP开发,以GoLand为例相关推荐

  1. 必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法

    必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_(KylinDemons) 版权声明 Copyright © 2021 KylinD ...

  2. Go开发工具GoLand使用教程(一):第一次运行

    在独立安装的情况下,运行取决于GoLand操作系统: GoLand官方正版下载 Windows 要运行 GoLand,请在 Windows开始菜单中找到它或使用桌面快捷方式.还可以在bin下的安装目录 ...

  3. Ubuntu安装Go及开发工具Goland

    Ubuntu安装Go及开发工具Goland 一.安装Go 1.直接在终端执行: sudo apt-get install golang 2.配置环境变量:  配置/etc/profile , 在该文件 ...

  4. labview 上位机软件开发——实用技巧1000例

    labview 上位机软件开发--实用技巧1000例 标题商与余数函数的用法 今天跟大家分享一个实用小技巧--商与余数函数的用法 1.真实工况: 一个测试台上位软件开发项目中,一个被试元件,要求做寿命 ...

  5. labview 上位机软件开发——实用技巧1000例 单位转换VI的巧妙用法

    标题第2例:单位转换VI的巧妙用法 标题labview 上位机软件开发--实用技巧1000例 今天跟大家分享一个工业领域上位机开发的实用小技巧--单位转换VI的巧妙用法 1.真实工况: 楼主做工业领域 ...

  6. Go安装:语言环境+开发工具GoLand

    一.Go语言环境安装 Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com) 选择合适版本,我这里装的是Windows 下载之后,双击,一路无脑安装,注意一下安装路 ...

  7. 面试测试开发工程师:用例篇

    目录 1. 测试用例的基本要素 2. 测试用例的给我们带来的好处 3. 测试用例的设计方法 3.1 测试用例的总体设计方法 基于需求的设计 3.2 具体的设计方法 3.2.2 等价类 3.2.3 边界 ...

  8. 关于《竹林蹊径 深入浅出Windows驱动开发》第一个例子在Win7下蓝屏

    在尝试运行<竹林蹊径 深入浅出Windows驱动开发>的第一个例子-HelloDRIVER时,在XP下没有问题,但在Win7下却发生蓝屏,蓝屏发生点在于卸载函数DriverUnload. ...

  9. 单体架构项目开发(插入数据为例)

    目录 创建项目 开发mapper层的准备工作: 开发mapper层:数据持久访问层 创建pojo包:使得整个项目结构清晰 关于POJO的设计规范 关于Mybatis框架 Mybatis的用法 创建ma ...

最新文章

  1. python学习-day2_课堂作业
  2. 多任务的介绍(并发、并行)
  3. DXUT框架剖析(12)
  4. 【干货】一个产品经理眼中的云计算:前生今世和未来
  5. PMAC运动程序例程(一)
  6. 分离数据库(Detach database).
  7. python 第三方库
  8. 【Pytorch神经网络理论篇】 12 卷积神经网络实现+卷积计算的图解
  9. win10虚拟机服务器错误怎么解决方法,虚拟机下安装win10系统后出现升级报错故障的解决方法【图文】...
  10. php四则运算出题器_php实现简单四则运算器
  11. 信息学奥赛一本通 1019:浮点数向零舍入 | OpenJudge NOI 1.2 06
  12. 千锋中级Python视频百度云
  13. 利用XML实现通用WEB报表打印(参考)
  14. 管桩的弹性模量计算公式_400管桩单桩水平承载力特征值计算书
  15. win7系统还原点来还原系统
  16. 《长尾理论》解释了抖音为啥火了
  17. Android开发英语单词积累
  18. 怎么截取巨大日志里某一天的log
  19. RabbitMQ报错ERROR: node with name rabbit already running on lhg1
  20. Tensorflow 2.* 网络训练(二) fit(x, y, batch_size, epochs, verbose, validation_split, initial_epoch... )

热门文章

  1. three相机在模型上_深入理解Three.js中透视投影照相机PerspectiveCamera
  2. 「网易云音乐」歌单推荐算法
  3. Devtools下载添加到谷歌扩展程序
  4. Linux shell脚本中分号的作用
  5. java设计模式 之 模板方法模式
  6. openGauss雄踞墨天轮2021年度中国数据库魔力象限领导者
  7. Git 远程篇之查看远程仓库信息
  8. 富文本wangEditor插件层级问题
  9. 002如何构建hadoop集群环境?
  10. 使用WinDbg —— .NET篇 (一)