• go module的常规操作


    为当前module添加一个依赖

    package main
    
    import (
      "github.com/google/uuid"
      "github.com/sirupsen/logrus"
    )
    
    func main() {
      logrus.Println("hello, go module mode")
      logrus.Println(uuid.NewString())
    }

    问题

    直接 go build 会报错

    $go build
    main.go:4:2: no required module provides package github.com/google/uuid; to add it:
      go get github.com/google/uuid

    实现方式

    一:go get

    Go 编译器提示我们,go.mod 里的 require 段中,没有哪个 module 提供了 github.com/google/uuid 包,如果我们要增加这个依赖,可以手动执行 go get 命令。那我们就来按照提示手工执行一下这个命令

    $go get github.com/google/uuid
    go: downloading github.com/google/uuid v1.3.0
    go get: added github.com/google/uuid v1.3.0

    将我们新增的依赖包下载到了本地 module 缓存里,并在 go.mod 文件的 require 段中新增了一行内容:

    require (
      github.com/google/uuid v1.3.0 //新增的依赖
      github.com/sirupsen/logrus v1.8.1
    )

    二:go mod tidy

    在执行构建前自动分析源码中的依赖变化,识别新增依赖项并下载他们:

    $go mod tidy
    go: finding module for package github.com/google/uuid
    go: found github.com/google/uuid in github.com/google/uuid v1.3.0

    但对于复杂的项目变更而言,逐一手工添加依赖项显然很没有效率,go mod tidy 是更佳的选择

    查询

    查询已发布的版本

    我们还是以上面提到过的 logrus 为例,logrus 现在就存在着多个发布版本,我们可以通过下面命令来进行查询:

    $go list -m -versions github.com/sirupsen/logrus
    github.com/sirupsen/logrus v0.1.0 v0.1.1 v0.2.0 v0.3.0 v0.4.0 v0.4.1 v0.5.0 v0.5.1 v0.6.0 v0.6.1 v0.6.2 v0.6.3 v0.6.4 v0.6.5 v0.6.6 v0.7.0 v0.7.1 v0.7.2 v0.7.3 v0.8.0 v0.8.1 v0.8.2 v0.8.3 v0.8.4 v0.8.5 v0.8.6 v0.8.7 v0.9.0 v0.10.0 v0.11.0 v0.11.1 v0.11.2 v0.11.3 v0.11.4 v0.11.5 v1.0.0 v1.0.1 v1.0.3 v1.0.4 v1.0.5 v1.0.6 v1.1.0 v1.1.1 v1.2.0 v1.3.0 v1.4.0 v1.4.1 v1.4.2 v1.5.0 v1.6.0 v1.7.0 v1.7.1 v1.8.0 v1.8.1

    查询当前module的所有依赖

    $go list -m all
    github.com/bigwhite/module-mode
    github.com/cespare/xxhash/v2 v2.1.1
    github.com/davecgh/go-spew v1.1.1
    ... ...
    github.com/go-redis/redis/v8 v8.11.1
    ... ...
    gopkg.in/yaml.v2 v2.3.0

    升级 / 降级依赖的版本

    实现方式

    一:go get 执行带版本号

    $go get github.com/sirupsen/logrus@v1.7.0
    go: downloading github.com/sirupsen/logrus v1.7.0
    go get: downgraded github.com/sirupsen/logrus v1.8.1 => v1.7.0

    二:go mod edit 明确版本号

    $go mod edit -require=github.com/sirupsen/logrus@v1.7.0
    $go mod tidy       
    go: downloading github.com/sirupsen/logrus v1.7.0

     移除依赖

    要想彻底从项目中移除 go.mod 中的依赖项,仅从源码中删除对依赖项的导入语句还不够。这是因为如果源码满足成功构建的条件,go build 命令是不会“多管闲事”地清理 go.mod 中多余的依赖项的。

    那正确的做法是怎样的呢?我们还得用 go mod tidy 命令,将这个依赖项彻底从 Go Module 构建上下文中清除掉。go mod tidy 会自动分析源码依赖,而且将不再使用的依赖从 go.mod 和 go.sum 中移除。

    特殊情况:使用 vendor

    在 Go 1.14 及以后版本中,如果 Go 项目的顶层目录下存在 vendor 目录,那么 go build 默认也会优先基于 vendor 构建,除非你给 go build 传入 -mod=mod 的参数。

  • 相关阅读:
    2022省选前集训
    牛客挑战赛57总结
    Atcoder做题总结
    CR775总结
    卡特兰猜想的一个弱化形式
    Jinja2实现模板高度自定义
    Harbor仓库安装使用cfssl工具生成证书
    odoo15 视频聊天打不开摄像头及麦克风问题解决
    整合SSM
    力扣332题(重新安排行程)
  • 原文地址:https://www.cnblogs.com/wanghaokun/p/16464276.html
Copyright © 2020-2023  润新知