admin管理员组文章数量:1122850
注意:Golang是支持向下兼容的,而Go1.10不支持gomod这给三方的包管理带来了一些复杂性,因此我们也可以使用go1.11.13版本,该版本编译的程序也可以在Windows XP SP3 上运行,同时go1.11是第一个使用了go mod的版本,但是请注意在Go1.11中部分API功能在XP上可能会不正常!
背景
在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/kardianos/govendor/tree/v1.0.9
安装Vendor
go get -u github/kardianos/govendor
安装完成后可以验证一下
注意vendor的使用同样需要我们将项目放置与GOPATH/src
中。
以刚才的mylib
为例,首先初始化vendor
govendor init
该操作会在项目中生成一个名为 vendor
的目录,并且创建一个vendor.json
文件描述了项目的信息以及依赖的包。
接下来添加一个三方库,以github/natefinch/lumberjack
举例
govendor fetch github/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/kardianos/govendor/context.(*Context).Alter
D:/go1.10.windows-amd64/gopath/src/github/kardianos/govendor/context/modify.go:712
D:/go1.10.windows-amd64/gopath/src/github/kardianos/govendor/run/modify.go:152
github/kardianos/govendor/run.(*runner).run
D:/go1.10.windows-amd64/gopath/src/github/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/kardianos/govendor/tree/v1.0.9
[2]. 掘金 . Go Vendor 使用指南 . 零度David . 2020.08 . https://juejin/post/6860377811488604168
版权声明:本文标题:Go XP开发,以GoLand为例 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1725928851a1031953.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论