Go XP开发,以GoLand为例

注意: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.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).Alter
        D:/go1.10.windows-amd64/gopath/src/github.com/kardianos/govendor/context/modify.go:712
        D:/go1.10.windows-amd64/gopath/src/github.com/kardianos/govendor/run/modify.go:152
github.com/kardianos/govendor/run.(*runner).run
        D:/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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值