zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/15567643.html
Copyright © 2011-2022 走看看