首页 > 其他分享 >【Go】go get & go mod

【Go】go get & go mod

时间:2024-04-12 11:44:19浏览次数:22  
标签:GOPATH 依赖 get Go go mod

go get

go get 命令用于从远程代码仓库(如 GitHub 或 GitLab)下载 Go 语言的包及其依赖,并将其安装到本地的 Go 开发环境中。从 2019 年开始,随着 Go Modules 功能的普及和默认启用,go get 的行为有所变化:

  1. 对于使用 Go Modules 的项目(Go 1.11 版本以后),当你执行 go get 命令时,它会根据 go.mod 文件管理依赖,并将依赖包下载至 $GOPATH/pkg/mod 目录下(如果设置了 GOPATH)。同时,go get 也会在全局模块缓存中存储依赖,通常位于 ~/.cache/go-build(对于 Unix 系统)或 %USERPROFILE%\.cache\go-build(对于 Windows 系统)。

  2. 如果你是在一个非模块化的项目(或者禁用了模块功能)并且设置了 GOPATH,那么下载的源码将会存储在 GOPATH/src 目录下相应的位置,例如:

    GOPATH=/home/user/go
    

    执行 go get github.com/user/repo 后,源码会被放在:

    /home/user/go/src/github.com/user/repo
    
  3. 对于可执行程序(比如 main 包),如果使用 Go Modules,它们会被安装到一个与项目相关的临时目录(由 Go Modules 管理),而不再是传统的 GOPATH/bin。若想将可执行文件安装到某个特定目录,可以使用 go install 命令配合 -i 标志(现在 -i 不再需要,因为 go install 默认包含了构建和安装的动作)和 -o 标志指定输出路径。

  4. 如果需要查看已安装到可执行路径下的二进制文件,可以通过 go list -f '{{.Target}}' <package> 查看对应包编译后的二进制文件路径。

  5. 在 Go 1.13 版本后,为了更细粒度地控制依赖,推荐使用 go install 命令替代 go get 来安装独立的命令行工具或库。

总之,go get 下载的包位置与项目的 Go Modules 设置和全局 GOPATH 设置紧密相关。随着 Go 语言的发展,最佳实践也在不断演进,因此建议始终查阅最新的官方文档了解最新行为。

go mod

Go Mod 是 Go 语言从 1.11 版本开始引入的模块化依赖管理工具。它为大型项目、跨多个仓库的工作以及更好地处理外部依赖提供了支持。主要特性包括:

  1. 模块定义:每个 Go 项目都可以有一个名为 go.mod 的文件,其中定义了模块的基本信息,如模块名称(通常是项目根目录下的相对路径或VCS仓库URL)和所需的最低Go版本。
module github.com/username/repo

go 1.16
  1. 依赖管理:当通过 go buildgo testgo rungo get 运行时,Go 会自动处理并记录项目依赖在 go.mod 文件中。添加依赖时,Go 会找到合适的版本(遵循语义化版本控制 SemVer 规范),并确保所有依赖之间的兼容性。

  2. 代理服务:Go 支持使用代理服务器(如 https://proxy.golang.org/)来加速依赖下载,并提供镜像和验证功能。

  3. 版本锁定go.sum 文件记录了依赖包的确切哈希值,确保每次构建时使用的都是相同的代码。

  4. 版本选择策略:Go 有灵活的版本选择策略,可以通过 require 语句在 go.mod 文件中明确指定依赖包的具体版本,也可以通过 go get -u 更新依赖到最新可用的版本(符合语义化版本规则)。

  5. 私有依赖支持:Go Mod 支持使用环境变量 GOPRIVATE 或 go.mod 中 replace 语句等方式解决私有仓库的依赖问题。

  6. 工作区模式:Go 1.13 版本之后引入了工作区模式,可以在同一工作区下管理多个模块项目,便于大型项目拆分和多模块协同开发。

使用 Go Mod 后,开发者无需设置 GOPATH,只需在项目根目录下运行 Go 命令即可。这极大地简化了大型 Go 项目的管理和维护流程。

标签:GOPATH,依赖,get,Go,go,mod
From: https://www.cnblogs.com/liudianer/p/18130849

相关文章

  • 脑洞golang embed 的使用场景
    golang的embed的功能真是一个很神奇的功能,它能把静态资源,直接在编译的时候,打包到最终的二进制程序中。为什么会设计这么一个功能呢?我想和golang的崇尚简单的原则有关系吧。它希望的是一个二进制文件能走天下,那么如果你作为一个web服务器,还需要依赖一大堆的静态文件,终究不......
  • vmwar出现Could not open...Please make sure that the kernel modul的问题
    打开vmware出现提示框,显示如下内容,进不去虚拟机Couldnotopen/dev/vmmon:?????????.Pleasemakesurethatthekernelmodule`vmmon'isloaded.在终端输入命令sudo/etc/init.d/vmwarestart再打开虚拟机就能进去了。[wszzn@abc-pc~]$sudo/etc/init.d/vmwarestart......
  • Godot Label样式 Textrue纹理,实现样式修改,背景填充
    目录前言运行环境新建项目Style样式讲解StyleBoxEmpty:普通样式StyleBoxTexture:字体样式StyleBoxFlat:填充样式StyleBoxLine:行样式总结前言在Godot中,直接的BackGroud背景颜色这个属性。Godot中使用的是Textrue纹理这个属性来表示文本的信息运行环境Godot4.2.1Windows10......
  • golang JSON序列化和反序列化
    目录JSON序列化(Marshaling)JSON反序列化(Unmarshaling)错误处理和注意事项在Go语言(通常被称为Golang)中,JSON(JavaScriptObjectNotation)是一种常用的数据交换格式。Go标准库提供了encoding/json包,使得JSON的序列化(将Go数据结构转换为JSON格式的字符串)和反序列化(将JSON格式的字符串......
  • 52 Things: Number 23: Write a C program to implement Montgomery arithmetic.
    52Things:Number23:WriteaCprogramtoimplementMontgomeryarithmetic.52件事:第23件:写一个C程序来实现Montgomery算术。 Thisisthelatestinaseriesofblogpoststoaddressthelistof这是一系列博客文章中最新的一篇'52ThingsEveryPhDStudentShould......
  • 52 Things: Number 22: How do you represent a number and multiply numbers in Mont
    52Things:Number22:HowdoyourepresentanumberandmultiplynumbersinMontgomeryarithmetic?52件事:数字22:在蒙哥马利算术中,你如何表示一个数字并将其相乘? Thisisthelatestinaseriesofblogpoststoaddressthelistof '52ThingsEveryPhDStudentSh......
  • 52 Things: Number 24: Describe the binary, m-ary and sliding window exponentiati
    52Things:Number24:Describethebinary,m-aryandslidingwindowexponentiationalgorithms.52件事:第24件:描述二进制、m进制和滑动窗口求幂算法。 Thisisthelatestinaseriesofblogpoststoaddressthelistof '52ThingsEveryPhDStudentShouldKnow......
  • 52 Things: Number 25: Methods for modular reduction using "special" primes that
    52Things:Number25:Methodsformodularreductionusing"special"primesthatdefine GF(p) and GF(2n)52件事:第25件:使用定义 GF(p) 和#1的“特殊”素数进行模归约的方法# Thisisthelatestinaseriesofblogpoststoaddressthelistof '52ThingsEver......
  • 52 Things: Number 26: Describe the NAF scalar multiplication algorithm.
    52Things:Number26:DescribetheNAFscalarmultiplicationalgorithm.52件事:第26件:描述NAF标量乘法算法。 Thisisthelatestinaseriesofblogpoststoaddressthelistof '52ThingsEveryPhDStudentShouldKnow' todoCryptography:asetofquestion......
  • 52 Things: Number 15: Key generation, encryption and decryption algorithms for R
    52Things:Number15:Keygeneration,encryptionanddecryptionalgorithmsforRSA-OAEPandECIES.52件事:第15件:RSA-OAEP和ECIES的密钥生成、加密和解密算法。 Thisisthelatestinaseriesofblogpoststoaddressthelistof  '52ThingsEveryPhDStuden......