• golang内置包管理工具go mod简明教程


    go mod

    go buildin package manager.

    go mod是go语言内置的包管理工具,集成在go tool中,安装好go就可以使用。

    要求: go version >= 1.11

    官方文档: https://tip.golang.org/cmd/go...

    环境变量

    # 通过环境变量GOPROXY设置代理
    export GOPROXY=https://goproxy.io
    
    # go mod功能开关,默认是auto,在gopath中不启用
    # 可设置为on强制启用
    export GO111MODULE=on

    go mod init

    初始化

    update:init现在已经做了优化
    go mod init <module-name>


    init报错outside gopath no import comments

    # 方法一 手动创建go.mod文件, 写入module xxx
    echo 'module xxx' > go.mod
    
    # 方法二 main包加入import声明
    package main // import "xxx"

    go mod download

    下载依赖

    go mod tidy

    同步依赖包,添加需要的,移除多余的

    go mod vendor

    将依赖包放入vendor

    go get 下载/升级依赖

    go mod不再下载源码进$GOPATH/src

    go mod的下载目录在$GOPATH/pkg/mod,并且是文件权限是只读的-r--r--r--

    # tag必须以v开头 v1.2.3格式
    go get -u xxx.com/pkg@2.1.0

    vendor 模式

    go mod是不推荐使用vendor目录的,而是直接使用source或cache中的包。

    module mode下默认忽略vendor目录。通过flag-mod=vendor设置vendor模式,依赖只从顶层的vendor中查找。可以通过环境变量GOFLAGS=-mod=vendor来设置flag。

    https://github.com/golang/go/...

    vendor模式下get报错

    goland编辑器勾选vender后会开启vendor模式。

    # go get: disabled by -mod=vendor
    
    # mod有三个取值
    # mod can be '', 'readonly', or 'vendor'
    # 两种赋值方式都可以
    -mod=''
    -mod ''

    replace

    让原本依赖的 github.com/repo/pkg 包,实际使用 github.com/your-fork/pkg@v。

    go mod edit -replace old[@v]=new[@v]
    
    # 如果不是replace本地包,必须带上版本号
    go mod edit -replace golang.org/x/crypto=github.com/golang/crypto@v0.0.0-20190621222207-cc06ce4a13d4
    # go.mod
    replace golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190621222207-cc06ce4a13d4
    
    replace golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 => github.com/golang/crypto v0.0.0-20190621222207-cc06ce4a13d4

    清缓存

    go clean -modcache

    go.mod & go.sum

    go.mod:依赖列表和版本约束。

    go.sum:记录module文件hash值,用于安全校验。

    最佳实践

    • go mod不推荐使用vendor,不要将vendor提交到版本控制。
    • CICD等场景下载vendor不方便时,使用vendor可能会更好。也可以考虑搭建nexus golang repo。
  • 相关阅读:
    帮朋友写的两篇文章
    与疯姐的对话
    实现C(i,j)=A(m,n,w)+B(m,n)
    误差处理相关
    http://blog.sina.com.cn/s/blog_4aae007d0100inxi.html
    全局变量和局部变量
    Yeelink:将复杂的传感器以极简的方式组到同一个网络内
    基站分布:GDOP
    C++学习路线图
    Matlab中三点确定质心
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/15567643.html
Copyright © 2020-2023  润新知