如何使用go get导入特定版本的软件包?

 潮流Fee_750 发布于 2023-01-02 02:36

来自Node我曾经安装特定版本的供应商lib的环境到项目文件夹(node_modules),告诉从控制台npm安装该版本的lib,package.json甚至直接从控制台安装,如下所示:

$ npm install express@4.0.0

然后我习惯在我的项目中导入该包的那个版本:

var express = require('express');

现在,我想做同样的事情go.我怎样才能做到这一点?是否可以安装特定版本的软件包?如果是这样,使用集中式$GOPATH,如何导入一个版本而不是另一个版本?

我会做这样的事情:

$ go get github.com/wilk/uuid@0.0.1
$ go get github.com/wilk/uuid@0.0.2

但是,在导入过程中如何才能有所作为呢?

8 个回答
  • Go 1.11将有一个名为go modules的功能,你可以简单地添加一个版本的依赖项.

    脚步

      go mod init .

      go mod edit -require github.com/wilk/uuid@0.0.1

    以下是有关该主题的更多信息:https: //github.com/golang/go/wiki/Modules

    2023-01-02 02:49 回答
  • 您可以通过官方dep设置版本

    dep ensure --add github.com/gorilla/websocket@1.2.0
    

    更新18-11-23:来自Go 1.11 mod是官方实验.请参阅@krish答案.

    2023-01-02 02:58 回答
  • 真的很惊讶没有人提到过gopkg.in.

    gopkg.in是一个提供包装器(重定向)的服务,它允许您将版本表示为repo URL,而不实际创建repos.例如gopkg.in/yaml.v1 vs gopkg.in/yaml.v2,即使他们都住在https://github.com/go-yaml/yaml

    gopkg.in/yaml.v1重定向到https://github.com/go-yaml/yaml/tree/v1

    gopkg.in/yaml.v2重定向到https://github.com/go-yaml/yaml/tree/v2

    如果作者没有遵循正确的版本控制实践(通过在向后兼容性时增加版本号),这并不完美,但它确实适用于分支和标记.

    2023-01-02 03:00 回答
  • 您可以使用git checkout此版本来获取特定版本并构建程序.

    例:

    export GOPATH=~/
    go get github.com/whateveruser/whateverrepo
    cd ~/src/github.com/whateveruser/whateverrepo
    git tag -l
    # supose tag v0.0.2 is correct version
    git checkout tags/v0.0.2
    go run whateverpackage/main.go
    

    2023-01-02 03:02 回答
  • Glide是一个非常优雅的Go管理包,特别是如果你来自Node的npm或Rust的货物.

    它在1.6中与Godep的新供应商功能密切相关,但更容易.您的依赖项和版本在projectdir/vendor目录中"锁定",而不依赖于GOPATH.

    使用brew安装(OS X)

    $ brew install glide
    

    初始化glide.yaml文件(类似于package.json).这也会从GOPATH中获取项目中现有的导入包,然后复制到项目的vendor /目录中.

    $ glide init
    

    获取新包裹

    $ glide get vcs/namespace/package
    

    更新并锁定包的版本.这会在项目目录中创建glide.lock文件以锁定版本.

    $ glide up
    

    我尝试滑行并乐意将它用于我当前的项目.

    2023-01-02 03:03 回答
  • dep是Go语言依赖管理的官方实验.它需要Go 1.8或更新版本才能编译.

    要开始使用管理依赖项dep,请从项目的根目录运行以下命令:

    dep init
    

    执行后将生成两个文件:(Gopkg.toml"manifest"),Gopkg.lock并将必要的包下载到vendor目录中.

    我们假设你有一个使用github.com/gorilla/websocket包的项目.dep将生成以下文件:

    Gopkg.toml

    # Gopkg.toml example
    #
    # Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
    # for detailed Gopkg.toml documentation.
    #
    # required = ["github.com/user/thing/cmd/thing"]
    # ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
    #
    # [[constraint]]
    #   name = "github.com/user/project"
    #   version = "1.0.0"
    #
    # [[constraint]]
    #   name = "github.com/user/project2"
    #   branch = "dev"
    #   source = "github.com/myfork/project2"
    #
    # [[override]]
    #  name = "github.com/x/y"
    #  version = "2.4.0"
    
    
    [[constraint]]
      name = "github.com/gorilla/websocket"
      version = "1.2.0"
    

    Gopkg.lock

    # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
    
    
    [[projects]]
      name = "github.com/gorilla/websocket"
      packages = ["."]
      revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b"
      version = "v1.2.0"
    
    [solve-meta]
      analyzer-name = "dep"
      analyzer-version = 1
      inputs-digest = "941e8dbe52e16e8a7dff4068b7ba53ae69a5748b29fbf2bcb5df3a063ac52261"
      solver-name = "gps-cdcl"
      solver-version = 1
    

    有哪些帮助你更新/删除/等的包,请找到更多信息的命令正式GitHub库的dep(对于围棋依赖管理工具).

    2023-01-02 03:09 回答
  • go get 是Go包管理器.它以完全分散的方式工作,并且如果没有中央软件包托管存储库,软件包发现仍然可行.

    除了查找和下载软件包之外,软件包管理器的另一个重要角色是处理同一软件包的多个版本.Go采用任何包管理器最简单实用的方法.没有多个版本的Go包这样的东西.

    go get总是来自存储库中默认分支的HEAD.总是.这有两个重要的含义:

      作为包装作者,您必须遵守稳定的HEAD理念.您的默认分支必须始终是包的稳定版本.您必须在功能分支中工作,并且只有在准备发布时才合并.

      包的新主要版本必须具有自己的存储库.简而言之,您的软件包的每个主要版本(遵循语义版本控制)都将拥有自己的存储库,从而拥有自己的导入路径.

      例如github.com/jpoehls/gophermail-v1和github.com/jpoehls/gophermail-v2.

    作为在Go中构建应用程序的人,上述哲学确实没有缺点.每个导入路径都是一个稳定的API.没有版本号需要担心.真棒!

    有关详细信息,请访问:http://zduck.com/2014/go-and-package-versioning/

    2023-01-02 03:10 回答
  • 从Go 1.5开始,"供应商实验"可帮助您管理依赖关系.从Go 1.6开始,这不再是一个实验.还有Go wiki上的其他一些选项..

    编辑:正如在这个答案中 提到的,gopkg.in是一个很好的选择,用于固定1.5之前的github-depdencies.

    2023-01-02 03:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有