zoukankan      html  css  js  c++  java
  • go mod使用 踏雪扬尘

    概述

    基本功能:
    依赖管理 : 管理所需依赖
    依赖包版本控制 : 每个依赖都可以定义 version
    对应的包管理平台 : 进行包的下载
    可以私有化部署 : 包管理工具可以私有化部署
    代码包是否可以复用 : 包管理工具必须可以复用
    构建,测试,打包 : 类似于 go build go test go package
    发布上线 : 发布上线

    gopath管理

    项目必须构建在 GOPATH/src 下面
    go get 的包默认是下载到 GOPATH/ src 下面, 但是不能维持多版本号,只能指向当前一种版本。
    最大问题无法控制版本号,GOPATH 存储的永远只有一个版本的数据。

    代码开发必须在go path src目录下,不然,就有问题。

    govendor

    一个配置文件解决包依赖的问题
    所有依赖包全部下载到项目 vendor 下, 每个项目都有一份,拉取项目非常慢

    如何开启Go module

    **modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。 就是替换了最原始的使用 gopath管理包的逻辑 **

    1.11和1.12版本
    将以下 GO111MODULE=on
    GOPROXY=https://goproxy.io 加到环境变量中就生效了
    1.13版本之后
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct

    GO111MODULE

    GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
    GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
    GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

    当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module

    go mod 命令

    命令 说明
    download download modules to local cache(下载依赖包)
    edit edit go.mod from tools or scripts(编辑go.mod)
    graph print module requirement graph (打印模块依赖图)
    verify initialize new module in current directory(在当前目录初始化mod)
    tidy add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
    vendor make vendored copy of dependencies(将依赖复制到vendor下)
    verify verify dependencies have expected content (验证依赖是否正确)
    why explain why packages or modules are needed(解释为什么需要依赖)

    go.mod 文件内容解读

    module 语句指定包的名字(路径)
    require 语句指定的依赖项模块
    replace 语句可以替换依赖项模块
    exclude 语句可以忽略依赖项模块

    运行机制,当运行 go run 时, 会自动下载依赖 到 mod中去
    go module 安装 package 的原則是先拉最新的 release tag,若无tag则拉最新的commit

    使用replace替换无法直接获取的package。modules 可以通过在 go.mod 文件中使用 replace 指令替换成github上对应的库,比如:
    replace (
    golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
    )

    操作

    拉取最新的版本(优先择取 tag) @latest会使用稳定的 tag进行引入
    go get golang.org/x/text@latest

    拉取 master 分支的最新 commit
    go get golang.org/x/text@master

    拉取 tag 为 v0.3.2 的 commit
    go get golang.org/x/text@v0.3.2

    拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2:
    go get golang.org/x/text@342b2e

    指定版本拉取,拉取v3版本
    go get github.com/smartwalle/alipay/v3

    go get -u

    mod基本操作

    初始化一个moudle,模块名为你项目名
    go mod init 模块名

    下载modules到本地cache
    目前所有模块版本数据均缓存在 $GOPATH/pkg/mod和 ​$GOPATH/pkg/sum 下
    go mod download

    删除错误或者不使用的modules
    go mod tidy

    查找依赖
    go mod why

    清理moudle 缓存
    go clean -modcache

    查看可下载版本
    go list -m -versions github.com/gogf/gf

  • 相关阅读:
    帝国CMS采集
    帝国CMS常用资料
    IIS 支持PHP(与Apache环境共存)
    Firebug+Firefox 脚本调试
    javascript 参考
    [__NSCFString objectFromJSONString]: unrecognized selector sent to 解决办法
    大家好,我在CSDN开通了博客
    Apple MachO Linker Error
    ios 排序
    ios 二维码生成 扫瞄
  • 原文地址:https://www.cnblogs.com/yyystar/p/15742913.html
Copyright © 2011-2022 走看看