Go語言包管理工具dep

什麼是dep?git

dep和go,在必定程度上至關於maven之於Java,composer之於PHP,dep是go語言官方的一個包管理工具。github

相比較go get而言,dep能夠直接給引入的第三方包一個專門的目錄,而且能夠專門制定一個配置文件,控制go項目所引入的包,版本以及其餘依賴關係。golang

dep這個項目放在golang官方的github中:https://github.com/golang/depwindows

官方對於dep的解釋是:dep is the official experiment, but not yet the official tool. 也就是說,dep目前還處於試驗階段,還並無成爲一個官方意義上的工具。畢竟go語言還很年輕,可是這也充分的證實了go語言的生態圈十分豐富。緩存

安裝composer

安裝dep工具的方式有不少種,若是是mac電腦的話,只須要以下命令:框架

brew install dep

對於Linux和類Unix系統而言,咱們還可使用以下方式安裝dep:curl

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

或者直接使用源碼安裝。maven

而對於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程序:

1 package main
2 
3 import (
4     "fmt"
5 )
6 func main() {
7     fmt.Println("hello)
8 }

以後咱們在這個目錄下運行以下命令:

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語言項目同樣:

 1 package main
 2 
 3 import "github.com/gin-gonic/gin"
 4 
 5 func main() {
 6     r := gin.Default()
 7     r.GET("/ping", func(c *gin.Context) {
 8         c.JSON(200, gin.H{
 9             "message": "pong",
10         })
11     })
12     r.Run() // listen and serve on 0.0.0.0:8080
13 }

這樣作徹底沒有問題,咱們只用考慮這個包本來的路徑github.com/gin-gonic/gin就好。

接下來咱們就能夠編譯運行這個項目了。

另外須要注意的是,使用dep管理包控制依賴的時候,若是咱們須要新建目錄,並編寫本身的新的包名的時候,只須要在src下新建目錄就能夠了。這樣作才能正確引入。

好比:咱們要編寫一個add的函數,咱們能夠這樣,在src下簡歷一個utils目錄,下寫個add.go文件:

1 package utils
2 
3 func Add(a int, b int) int {
4     return a+b
5 }

這樣在主程序中,這樣寫就能夠import本身寫的包,並使用本身的函數了:

package main

import (
    "utils"
    "fmt"
)
func main() {
    fmt.Println("hello")
    utils.Add(1, 1)
}
相關文章
相關標籤/搜索