Go XP开发,以GoLand为例
背景
在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 id
或tag
就可以。
下载安装完成后,我们就可以在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为例相关推荐
- 必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法
必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_(KylinDemons) 版权声明 Copyright © 2021 KylinD ...
- Go开发工具GoLand使用教程(一):第一次运行
在独立安装的情况下,运行取决于GoLand操作系统: GoLand官方正版下载 Windows 要运行 GoLand,请在 Windows开始菜单中找到它或使用桌面快捷方式.还可以在bin下的安装目录 ...
- Ubuntu安装Go及开发工具Goland
Ubuntu安装Go及开发工具Goland 一.安装Go 1.直接在终端执行: sudo apt-get install golang 2.配置环境变量: 配置/etc/profile , 在该文件 ...
- labview 上位机软件开发——实用技巧1000例
labview 上位机软件开发--实用技巧1000例 标题商与余数函数的用法 今天跟大家分享一个实用小技巧--商与余数函数的用法 1.真实工况: 一个测试台上位软件开发项目中,一个被试元件,要求做寿命 ...
- labview 上位机软件开发——实用技巧1000例 单位转换VI的巧妙用法
标题第2例:单位转换VI的巧妙用法 标题labview 上位机软件开发--实用技巧1000例 今天跟大家分享一个工业领域上位机开发的实用小技巧--单位转换VI的巧妙用法 1.真实工况: 楼主做工业领域 ...
- Go安装:语言环境+开发工具GoLand
一.Go语言环境安装 Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com) 选择合适版本,我这里装的是Windows 下载之后,双击,一路无脑安装,注意一下安装路 ...
- 面试测试开发工程师:用例篇
目录 1. 测试用例的基本要素 2. 测试用例的给我们带来的好处 3. 测试用例的设计方法 3.1 测试用例的总体设计方法 基于需求的设计 3.2 具体的设计方法 3.2.2 等价类 3.2.3 边界 ...
- 关于《竹林蹊径 深入浅出Windows驱动开发》第一个例子在Win7下蓝屏
在尝试运行<竹林蹊径 深入浅出Windows驱动开发>的第一个例子-HelloDRIVER时,在XP下没有问题,但在Win7下却发生蓝屏,蓝屏发生点在于卸载函数DriverUnload. ...
- 单体架构项目开发(插入数据为例)
目录 创建项目 开发mapper层的准备工作: 开发mapper层:数据持久访问层 创建pojo包:使得整个项目结构清晰 关于POJO的设计规范 关于Mybatis框架 Mybatis的用法 创建ma ...
最新文章
- python学习-day2_课堂作业
- 多任务的介绍(并发、并行)
- DXUT框架剖析(12)
- 【干货】一个产品经理眼中的云计算:前生今世和未来
- PMAC运动程序例程(一)
- 分离数据库(Detach database).
- python 第三方库
- 【Pytorch神经网络理论篇】 12 卷积神经网络实现+卷积计算的图解
- win10虚拟机服务器错误怎么解决方法,虚拟机下安装win10系统后出现升级报错故障的解决方法【图文】...
- php四则运算出题器_php实现简单四则运算器
- 信息学奥赛一本通 1019:浮点数向零舍入 | OpenJudge NOI 1.2 06
- 千锋中级Python视频百度云
- 利用XML实现通用WEB报表打印(参考)
- 管桩的弹性模量计算公式_400管桩单桩水平承载力特征值计算书
- win7系统还原点来还原系统
- 《长尾理论》解释了抖音为啥火了
- Android开发英语单词积累
- 怎么截取巨大日志里某一天的log
- RabbitMQ报错ERROR: node with name rabbit already running on lhg1
- Tensorflow 2.* 网络训练(二) fit(x, y, batch_size, epochs, verbose, validation_split, initial_epoch... )