Golang官方依赖管理工具dep学习使用笔记

栏目: Go · 发布时间: 6年前

内容简介:golang的之前的版本一直缺乏官方的包管理,第三方的包管理个人感觉还是比较麻烦的,但是看到dep现在样子之后还是有了很大的兴趣,使用了之后发现也确实方便了很多。推荐使用dep今天在看一个内部项目的时候发现内部一个项目的体积非常大,一看原来是vendor占了很大空间。里面的库都是静态提交到git库的,更新和管理都很不方便,想想java开发中的maven多好用啊。之前也知道golang一直在开发类似的东西,借这个机会了解了一下,golang也已经有了这样的工具了:godep。所以赶紧拿来研究一下看看怎么用起来

golang的之前的版本一直缺乏官方的包管理,第三方的包管理个人感觉还是比较麻烦的,但是看到dep现在样子之后还是有了很大的兴趣,使用了之后发现也确实方便了很多。推荐使用dep

Golang官方依赖管理工具:dep

Golang官方依赖管理工具dep学习使用笔记

今天在看一个内部项目的时候发现内部一个项目的体积非常大,一看原来是vendor占了很大空间。里面的库都是静态提交到git库的,更新和管理都很不方便,想想 java 开发中的maven多好用啊。之前也知道golang一直在开发类似的东西,借这个机会了解了一下,golang也已经有了这样的 工具 了:godep。所以赶紧拿来研究一下看看怎么用起来,用了之后发现,哎,还挺好用的。管理起来非常便捷,不过要吐槽的还是公司的网络环境,好蛋疼啊!

godep是Golang官方的库依赖管理工具,用来管理和下载项目中依赖的库,从目前使用来说,还是比较好的,在分支,版本的控制上都还不错,就是它的配置文件感觉有点原始。下面是是官方对这个工具的介绍。

dep is a prototype dependency management tool for Go. It requires Go 1.9 or newer to compile. dep is safe for production use.

接下来我们就看看怎么使用这个工具,先从简单的来。

安装dep

go get -u github.com/golang/dep/cmd/dep

一般是安装在这个地方:

# $GOPATH/bin/dep.exe

测试

$ dep
Dep is a tool for managing dependencies for Go projects

Usage: "dep [command]"

Commands:

  init     Set up a new Go project, or migrate an existing one
  status   Report the status of the project's dependencies
  ensure   Ensure a dependency is safely vendored in the project
  version  Show the dep version information
  check    Check if imports, Gopkg.toml, and Gopkg.lock are in sync

Examples:
  dep init                               set up a new project
  dep ensure                             install the project's dependencies
  dep ensure -update                     update the locked versions of all dependencies
  dep ensure -add github.com/pkg/errors  add a dependency to the project

Use "dep help [command]" for more information about a command.

helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepmod

使用

在$GOPATH/src下创建项目,比如godepdemo,进入文件夹

cd $GOPATH/src/godepdemo

初始化目录

helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo
$ dep init

helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo
$ ls
Gopkg.lock  Gopkg.toml  vendor

这里生成了2个文件和一个文件夹。

vendor应该都不陌生了,vendor 目录是 golang1.5 以后依赖管理目录,类似node中的node_module目录。其实在最新版本的 go 中已经可以废弃了,尤其适用了dep管理依赖之后,不过也兼容,目前还是优先使用vendor目录中的依赖库,这个目录的依赖代码是优先加载的。

Gopkg.toml简单讲是依赖库的清单文件,Gopkg.lock是校验描述文件。Gopkg.toml 是依赖管理的核心文件,可以生成也可以手动修改, Gopkg.toml 官方文档

Gopkg.lock 是生成的文件,不要手工修改 Gopkg.lock 官方文档

下面我们在Gopkg.toml文件中添加依赖库测试一下,这里以试用gin库为例来做一个测试。

Gopkg.toml的内容

# Gopkg.toml example
#
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
# 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"
#
# [prune]
#   non-go = false
#   go-tests = true
#   unused-packages = true

[[constraint]]
  name = "github.com/gin-gonic/gin"
  version = "v1.3.0"

[[constraint]]
  name = "github.com/cihub/seelog"
  version = "v2.6"

[prune]
  go-tests = true
  unused-packages = true

再来写一个测试程序

main.go

package main

import ( 
    "github.com/gin-gonic/gin"
    "github.com/cihub/seelog"
)

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    seelog.Info("app run ")
    r.Run() // listen and serve on 0.0.0.0:8080
    seelog.Info("app over")
}

更新试用

helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo
$ dep ensure

helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo
$ go run main.go

常用命令和一些问题

dep init

初始化项目,主要是生成Gopkg.lock,Gopkg.toml,vendor这三个文件。

dep status

用来查看项目依赖的详细信息和状态,非常清晰,

$ dep status
PROJECT                              CONSTRAINT     VERSION        REVISION  LATEST   PKGS USED
github.com/cihub/seelog              ^2.6.0         v2.6           d2c6e5a   v2.6     1
github.com/gin-contrib/sse           branch master  branch master  22d885f   22d885f  1
github.com/gin-gonic/gin             ^1.3.0         v1.3.0         b869fe1   v1.3.0   4
github.com/golang/protobuf           v1.2.0         v1.2.0         aa810b6   v1.2.0   1
github.com/json-iterator/go          v1.1.5         v1.1.5         1624edc   v1.1.5   1
github.com/mattn/go-isatty           v0.0.4         v0.0.4         6ca4dbf   v0.0.4   1
github.com/modern-go/concurrent      1.0.3          1.0.3          bacd9c7   1.0.3    1
github.com/modern-go/reflect2        1.0.1          1.0.1          4b7aa43   1.0.1    1
github.com/ugorji/go                 v1.1.1         v1.1.1         b4c50a2   v1.1.1   1

CONSTRAINT为Gopkg.toml中限定的版本;

VERSION为当前vendor中的版本;

REVISION为当前vendor中的修订号;

LATEST为CONSTRAINT限定下github中能满足要求的最新版本。

dep ensure

用来同步包的配置文件和引入的包,建议使用的时候加上’-v’参数

dep ensure -v

尝试确保所有的依赖库都已经安装,如果没有即下载,相当于对依赖库做增量更新。修改Gopkg.toml中的CONSTRAINT,若使得LATEST低于当前vendor中的版本,则运行dep ensure后,vendor中的版本降低到能满足要求的最新版本;若使得LATEST高于vendor中的版本,则运行dep ensure后,vendor中的版本不变,可使用dep ensure -update更新vendor到LATEST版本。

dep prune -v

删除没有用到的 package

dep help ensure

依赖管理帮助

dep ensure -add github.com/cihub/seelog

添加一条依赖

dep ensure -add github.com/cihub/seelog@=2.6.0

这里 @= 参数指定的是 某个 tag

dep ensure

添加后一定记住执行 确保 同步

dep ensure -update -v

更新依赖

本地缓存

当然dep不会每次都去下载,其工作原理和Mevan一样,会优先在本地仓库搜索,本地仓库未找到即在网络上下载,并添加到本地仓库。下面是dep保存本地库的路劲。

$GOPATH/pkg/dep/sources

总结

这种方式来管理依赖包,还是比较方便的。在我测试的过程中一气呵成,没有任何阻碍,整体感觉非常流畅也很好用,和maven的管理比较类似。

感觉有意思?来鼓励一下!

Golang官方依赖管理工具dep学习使用笔记

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Open Data Structures

Open Data Structures

Pat Morin / AU Press / 2013-6 / USD 29.66

Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码