关于Go Modules环境搭建和包管理工具的使用

举报
小哈里 发表于 2022/07/17 23:02:36 2022/07/17
【摘要】 文章目录 1 GOPATH2 GoVendor3 Go Module4 一个例子 1 GOPATH Go的依赖管理主要经历了3个阶段,分别是GOPATH, GoVendor, ...

1 GOPATH

  • Go的依赖管理主要经历了3个阶段,分别是GOPATH, GoVendor, Go Module。

  • 整个演进路线主要围绕实现两个目标来迭代发展的,分别是1,2

  • GOPATH是Go语言支持的一个环境变量,value是Go项目的工作区。
    目录有以下结构:
    src存放Go项目的源码;
    pkg:存放编译的中间产物,加快编译速度;
    bin:存放Go项目编译生成的二讲制文件.
    在这里插入图片描述

  • 用gopath依赖管理有哪些弊端呢?相信大家都有了自己的思考结果,来我一起看一下,同一个ke ,有2个版本,A->A468, B-EC0而src下只能有一个版本存在,AB无法保证都能编译通过,也就是gopath管理下, 如果有多个项目依赖该库是同一份代码,不同项目不能依赖同一个库的不同版本,这很显然不能满足我们的项目依赖需求。为了解决这问题,govender出现了。

# 命令行输入如下命令查看Go配置信息
go env

  
 
  • 1
  • 2

在这里插入图片描述

GOARCH 表示目标处理器架构。
GOBIN 表示编译器和链接器的安装位置。
GOOS 表示目标操作系统。
GOPATH 表示当前工作目录。
GOROOT 表示 Go 开发包的安装目录。

如何修改GOPATH
windows默认目录%USERPROFILE%\go
直接在环境变量里增删改查即可。
在这里插入图片描述

2 GoVendor

  • Vendor是当前项目中的一个目录,其中存放了当前项目的版本。在Vendor胡制下,如果当前项目存在Vendor目录,会优先使用该目录下的依赖,如果依赖不存在,会从(GOHATH中寻找)

3 Go Module

  • GoModues是Go语言官方推出的依赖管理系统,解决了之前依赖管理系统存在的诸如无法依赖同一个库的多个版本等问题 go mocdue从Go 11.1开始实验性引入,Go 1.16默认开启;
如何查看Go版本
go version

  
 
  • 1
  • 2
  • 设置go mod和go proxy
    go env -w会将配置写到 GOENV=“/Users/youdi/Library/Application Support/go/env”
Go Modules环境配置
go env -w GOBIN=/Users/gwj11/go/bin
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct // 使用七牛云的

  
 
  • 1
  • 2
  • 3
  • 4
  • GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
    GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找
    当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module

4 一个例子

首先我们需要初始化一个go.mod

go mod init test

  
 
  • 1

然后我们引入模块的时候,以test(初始化时定义)开头,然后接模块路径,比如

import "test/module"

  
 
  • 1

新建一个hello.go文件如下

package main

import "github.com/astaxie/beego"

func main() {
    beego.Run()
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

按照过去的做法,要运行hello.go需要执行go get 命令 下载beego包到 $GOPATH/src
现在我们可以直接 go run hello.go
稍等片刻… go 会自动查找代码中的包,下载依赖包,并且把具体的依赖关系和版本写入到go.mod和go.sum文件中。

module Gone

go 1.14

require github.com/gin-gonic/gin v1.6.3

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

查看go.mod,它会变成这样:

module hello

go 1.12

require github.com/astaxie/beego v1.11.1

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 依赖的包下载到哪里了?还在GOPATH里吗?
    不在。使用Go的包管理方式,依赖的第三方包被下载到了$GOPATH/pkg/mod

文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/124785660

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。