什么是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程序:
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) }