go module 详解

chymingyan · · 4420 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基础知识

环境准备

  1. 使用golang 1.11以上版本的朋友,开启 GO11MODULE=on ,并且确保实验目录不在 GOPATH 中,命令行里执行。
    export GO11MODULE=on
    export GO111MODULE=on
    2.golang 1.12和golang 1.13的朋友,确保实验目录不在 GOPATH 中。
    3.加速下载,命令行里执行。
    export GOPROXY=https://goproxy.io

    初始化go module环境

    带git的项目

  2. 直接从github上面clone一个项目下来。
  3. 直接执行 go mod init 会自动生成带git地址的packagename
  4. 执行命令:
    go mod init
    不带git的项目
    直接执行
    go mod init packagename
    下载依赖包
    go mod download
    拉取必须模块,移除不用的模块
    go mod tidy
    ps:
  5. go get、 go run、go build 也会自动下载依赖
  6. 如果tag对应内容有更新,需要删除pkg中的缓存内容;直接rm -rf *就可以了。
    添加新依赖包三种方式
    • 直接修改 go.mod 文件,然后执行 go mod download
    • 使用 go get packagename@v0.0.0,会自动更新 go.mod 文件的
    • go run、go build 也会自动下载依赖
      将依赖包下载到vendor目录
      go mod vendor

功能介绍一
使用replace本地包替换:
基于国内万能的防火墙,就可能会用到这个功能

main.go

main.go

package main
import "packagepath/pkg"
func main() {
    pkg.Hello()
}

go mod

module go-mod

require packagepath/pkg v0.0.0
replace packagepath/pkg => ./pkg

replace 可以文件夹,也可以是另外一个package

module go-mod

require packagepath/pkg v0.0.0
replace packagepath/pkg v0.0.0 => github.com/packagepath/pkg v0.0.0

ps:顶层依赖可替换但间接依赖不可替换

总结:

  1. 一般情况,go mod init 和 go mod tidy 两个命令就够用了。
  2. 看$GOPATH/pkg/mod里面的文件就知道了,mod做了一件类似maven的事把所有包都打上了版本号;可以说这是 golang 迈向高大上语言的标志。
    从此我们不再为多版本使用的困扰,也不再为IDE打开一个新项目后等待n分钟的生成缓存犯愁。推荐大家丢掉vendor使用统一管理。
    3.semver 将版本信息绑定进包名对于习惯了传统包管理器方案的用户来说显得有些怪异,可能需要花上一些额外时间适应。

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:chymingyan

查看原文:go module 详解

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4420 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传