设为首页 收藏本站
查看: 2055|回复: 0

[经验分享] Go语言包管理工具dep

[复制链接]

尚未签到

发表于 2018-9-21 09:26:40 | 显示全部楼层 |阅读模式
  什么是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就会为我们自动生成如下文件和目录:
DSC0000.png

  有点像常规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)
  
}
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-599226-1-1.html 上篇帖子: 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证 下篇帖子: hyperledger fabric 1.0.5 分布式部署 (八)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表