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

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

内容简介: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学习使用笔记

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

查看所有标签

猜你喜欢:

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

计算机系统基础

计算机系统基础

袁春风 / 机械工业出版社 / 2014-7-1 / CNY 49.00

《计算机类专业系统能力培养系列教材:计算机系统基础》主要介绍与计算机系统相关的核心概念,解释这些概念如何相互关联并最终影响程序执行的结果和性能。共分8章,主要内容包括数据的表示和运算、程序的转换及机器级表示、程序的链接、程序的执行、存储器层次结构、虚拟存储器、异常控制流和I/O操作的实现等。内容详尽,反映现实,概念清楚,通俗易懂,实例丰富,并提供大量典型习题供读者练习。本书可以作为计算机专业本科或......一起来看看 《计算机系统基础》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具