Go入门学习笔记四:了解 Go Modules

  • 原创
  • 作者:程序员三丰
  • 发布时间:2021-07-26 10:54
  • 浏览量:801
go modules简称为go mod,是Go team (Russ Cox) 强推的一个依赖管理解决方案,Go modules 的解决的问题之一就是“淘汰”掉 GOPATH,要求我们把依赖的包及其版本写在go.mod文件中,就好像java的pom.xml。

了解 Go Modules

Go Modules 简介

  • 是Go team (Russ Cox) 强推 的一个依赖管理解决方案。
  • 发布于Go 1.11,成长于 Go 1.12,丰富于 Go 1.13,完善与 Go++。
  • 淘汰 GOPATH 而生。
  • Opt-in 式设计,即在开发中自行选择是否使用。
  • 官方 wiki 介绍:https://github.com/golang/go/wiki/Modules。

Go Modules 相关属性

  • 开关变量

    • GO111MODULE,可选值:

      • auto:只在项目包含了go.mod文件时启用Go modules。

      • on:启用Go modules。

      • off:禁用Go modules。

      • 设置命令:

        go env -w GO111MODULE=on
        
  • 辅助环境变量

    • GOPROXY,主要用户设置 Go 模块代理:

      • 值:是一个以英文逗号分隔的Go module proxy 列表。

        通过go env命令可查询默认值,如果是proxy.golang.org,因其在中国无法访问,所以推荐使用goproxy.cn

      • 设置命令:

        go env -w GOPROXY=https://goproxy.cn,direct
        
      • 作用:用于使Go在后续拉去模块版本时能够脱离传统的VCS方式从镜像站点快速拉取。

      • 设置为“off”:禁止Go在后续操作中使用任何Go module proxy。

    • GONOPROXY

    • GOSUMDB

    • GONOSUMDB

    • GOPRIVATE

  • 辅助概念

    • Go module proxy
    • Go checksum database
  • 主要文件

    • go.mod:是启用了Go modules 的项目所必须的最重要的文件,它描述了当前项目(也就是当前模块)的元信息,每一行都以一个动词开头,目前有以下5个动词:

      • module:用于定义当前项目的模块路径。

      • go:用于设置预期的 Go 版本。

      • require:用于设置一个特定的模块版本。

      • exclude:用于从使用中排除一个特定的模块版本。

      • replace:用于将一个模块版本替换为另一个模块版本。

      • 实例代码:

        // go.mod
        module example.com/foobar
        
        go 1.13
        
        require (
            example.com/apple v0.1.2
            example.com/banana v1.2.3
            example.com/banana/v2 v2.3.4
            example.com/pineapple v0.0.0-20190924185754-1b0db40df49a
        )
        
        exclude example.com/banana v1.2.4
        replace example.com/apple v0.1.2 => example.com/rda v0.1.0 
        replace example.com/banana => example.com/hugebanana
        
  • go.sum

    • 详细罗列了当前项目直接或间接依赖的所有模块版本,并写明了那些模块版本的 SHA-256 哈希值以备Go在今后的操作中保证醒目所依赖的那些模板版本不会被篡改。
  • 主要管理子命令

    • go mod
  • 内置在几乎所有其他子命令中:go get、go install、go list、go test、go run、go build…

  • Global Caching:不同项目的相同模块版本只会在你的电脑上缓存一份。

参考资源

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/13.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas