Go语言包管理工具dep的安装与使用

 更新时间:2018年07月11日 09:39:52   作者:Summer7C  
godep是解决包依赖的管理工具,下面这篇文章主要给大家介绍了关于Go语言包管理工具dep的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是dep?

dep和go,在一定程度上相当于maven之于Java,composer之于PHP,dep是go语言官方的一个包管理工具。

相比较go get而言,dep可以直接给引入的第三方包一个专门的目录,并且可以专门制定一个配置文件,控制go项目所引入的包,版本以及其他依赖关系。

dep这个项目放在golang官方的github中:https://github.com/golang/dep

官方对于dep的解释是:dep is the official experiment, but not yet the official tool. 也就是说,dep目前还处于试验阶段,还并没有成为一个官方意义上的工具。毕竟go语言还很年轻,但是这也充分的证明了go语言的生态圈十分丰富。

安装

安装dep工具的方式有很多种,如果是mac电脑的话,只需要如下命令:

brew install dep

对于Linux和类Unix系统而言,我们还可以使用如下方式安装dep:

curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

或者直接使用源码安装。

而对于windows电脑,可能会相对来说麻烦些,我们可以直接使用源码编译安装或者直接使用go get命令安装:

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

待安装完成之后,将dep.exe放在环境变量就可以使用了。

使用

接下来我们来看一下dep的使用方式。

当安装好dep之后,我们在命令行中,输入dep就可以看到有关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

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.

我们可以看出来,dep一般进场会使用3个命令:

init-用来初始化项目

status-用来查看当前项目的依赖包的状态

ensure-用来同步包的配置文件和引入的包

下面我们正式使用dep来创建一个项目。首先建立一个项目路径,这里我们将项目路径叫做depProject。然后在项目路径中建立src源代码目录。在src中建立一个存放dep文件和项目主文件的目录,我们暂且可以叫做depmain,并建立一个go文件。

这样我们的目录结构如下:

depProject
    |----src
          |----depmain
                  |-----main.go

建立好之后,我们在main.go中写一个简单的go程序:

package main

import (
 "fmt"
)
func main() {
 fmt.Println("hello)
}

之后我们在这个目录下运行如下命令:

dep init

运行完成之后,dep就会为我们自动生成如下文件和目录:

 

有点像常规go项目的样子了,不过需要注意的是pkg中存放的go语言引入包的缓存文件,vendor中存放的是真正的引入的包内容。接下来是两个文件,Gopkg.lock和Gopkg.toml。Gopkg.lock文件是自动生成的,而Gopkg.toml文件是我们可以编辑的文件,通过编辑这个文件,并运行dep的命令可以达到引入包的目的:

# 必需包
required = ["github.com/gin-gonic/gin"]
# 忽略包
#ignored = []没有可以不写
# 项目元数据
#[metadata]


# 约束条件
[[constraint]]
 # name = 
 # 可选:版本
 # version =
 # 分支
 # branch
 # 修订
 # revision
 # 可选:指定来源
 # source = "github.com/gin-gonic/gin"

以上代码是一个示例,我们写好之后运行

dep ensure

就可以了,我们会看到vendor下多了一些有关此包的依赖和引入。

我们引入了gin框架的包,所以我们现在就可以使用gin框架了,写的时候,和我们平时的go语言项目一样:

package main

import "github.com/gin-gonic/gin"

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

这样做完全没有问题,我们只用考虑这个包原本的路径github.com/gin-gonic/gin就好。

接下来我们就可以编译运行这个项目了。

另外需要注意的是,使用dep管理包控制依赖的时候,如果我们需要新建目录,并编写自己的新的包名的时候,只需要在src下新建目录就可以了。这样做才能正确引入。

比如:我们要编写一个add的函数,我们可以这样,在src下简历一个utils目录,下写个add.go文件:

package utils

func Add(a int, b int) int {
 return a+b
}

这样在主程序中,这样写就可以import自己写的包,并使用自己的函数了:

package main

import (
 "utils"
 "fmt"
)
func main() {
 fmt.Println("hello")
 utils.Add(1, 1)
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 详解Go是如何优雅的进行内存管理

    详解Go是如何优雅的进行内存管理

    Go语言抛弃C/C++中的开发者管理内存的方式,实现了主动申请与主动释放管理,增加了逃逸分析和垃圾回收,将开发者从内存管理中释放出来,作为进阶的Go开发,了解掌握Go的内存管理还是很有必要的
    2023-09-09
  • Golang开发gRPC服务入门介绍

    Golang开发gRPC服务入门介绍

    这篇文章主要介绍了Golang开发gRPC服务,Golang开发gRPC应用程序的套路也已经很清晰,这篇文章就来做一个简单的介绍,算是入门,需要的朋友可以参考下
    2022-04-04
  • golang defer执行顺序全面详解

    golang defer执行顺序全面详解

    这篇文章主要为大家介绍了golang defer执行顺序全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go语言中sync.Mutex的使用方法

    Go语言中sync.Mutex的使用方法

    本文主要介绍了golang中sync.Mutex的实现方法,mutex主要有两个 method:Lock()和Unlock(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • go内存缓存BigCache封装Entry源码解读

    go内存缓存BigCache封装Entry源码解读

    这篇文章主要为大家介绍了go内存缓存BigCache封装Entry源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • go语言变量定义用法实例

    go语言变量定义用法实例

    这篇文章主要介绍了go语言变量定义用法,实例分析了go语言变量的定义及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • golang如何去除 context 的 deadline

    golang如何去除 context 的 deadline

    在使用 context 的时候遇到了开协程处理任务的情况,但是直接在协程里使用主线程的 context 会导致当主线程返回时协程任务也会因为 context cancel 而失败,本文提供了两种办法可以取消掉 context 里的 timeout 和 deadline,再设置一个新的 timeout 上去
    2023-03-03
  • Golang实现微信公众号后台接入的示例代码

    Golang实现微信公众号后台接入的示例代码

    这篇文章主要介绍了Golang实现微信公众号后台接入的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • vim配置go语言语法高亮问题的解决方法

    vim配置go语言语法高亮问题的解决方法

    vim配置go语言语法高亮的问题已经遇到过好几次了,每次都是找不到答案,今天小编给大家带来了vim配置go语言语法高亮问题的解决方法,感兴趣的朋友一起看看吧
    2018-01-01
  • 一文搞懂Golang文件操作增删改查功能(基础篇)

    一文搞懂Golang文件操作增删改查功能(基础篇)

    这篇文章主要介绍了一文搞懂Golang文件操作增删改查功能(基础篇),Golang 可以认为是服务器开发语言发展的趋势之一,特别是在流媒体服务器开发中,已经占有一席之地,今天我们不聊特别深奥的机制和内容,就来聊一聊 Golang 对于文件的基本操作
    2021-04-04

最新评论