golang多個項目時如何配置GOPATH,使用gb包依賴管理工具,不同項目配置不同的GOPATH的


golang多個項目時如何配置GOPATH,使用gb包依賴管理工具,不同項目配置不同的GOPATH的

1:執行腳本setGoPath.sh
#!/bin/bash
if [[ $GOPATH =~ .*$PWD.* ]]
then
echo "currnet dir is already in GOPATH"
else
export GOPATH=$GOPATH:$PWD
echo "fininsh setting $PWD in GOPATH"
fi
在項目主目錄中運行source setGoPath.sh 將當期項目路徑寫入GOPATH

2:使用Golang包依賴管理工具gb替代go來構建項目
這個gb就是一個替代go的build 和 test的工具,可以讓項目在任意路徑時運行構建
github地址:https://github.com/constabulary/gb
首先要把這個gb裝到GOPATH的src中。如果GOPATH有多個路徑,裝到任意一個路徑中即可
確保你的GOPATH在PATH中,這樣就能全局調用gb命令了

=============

Go語言提供兩個關鍵路徑,GOROOT 指向系統安裝路徑,GOPATH指向工作路徑,這樣的好處是,我們的工作可以和系統文件分離。
例如:
GOROOT = C:\Go
GOPATH = D:\MyWorks

其中,go語言源代碼和編譯的中間文件、目標文件存放位置如下:
C:\Go <<--- GOROOT 指向的位置
--src <<--- Go 語言自帶的源代碼
--pkg <<--- 編譯的中間文件放在此文件夾
--bin <<--- 編譯的目標文件放在此文件夾
D:\MyWorks <<--- GOPATH 指向的位置
--src <<--- 項目源代碼放置在此文件夾。!!!警告:一個常犯的錯誤是把 GOPATH 指向此處!!!
--HelloWorld <<--- 我們項目源代碼所在的文件夾。!!!警告:一個常犯的錯誤是把 GOPATH 指向此處!!!
--vendor <<--- 第三方開源代碼文件夾
--github.com
--...
--pkg <<--- 編譯的中間文件放在此文件夾,Go編譯器自動生成此文件夾
--bin <<--- 編譯的目標文件放在此文件夾,Go編譯器自動生成此文件夾

========================

使用Golang包依賴管理工具gb替代go來構建項目
一個Golang項目工程通常由bin、pkg、src三個子目錄構成,gb在這個概念的基礎上新增了一個vendor目錄來存放項目依賴的第三方包;一個gb項目的工作目錄里包含該項目需要的所有Go代碼。

gb項目不放在你的$GOPATH中,也不需要為你的gb項目設置或修改$GOPATH。依賴的第三包需要放到vendor/src目錄中,並使用gb來編譯和測試你的項目。

安裝gb
gb的官網是:http://getgb.io/

使用如下命令即可安裝gb:
go get github.com/constabulary/gb/...
安裝gb后,會有gb和gb-vendor兩個可執行文件放入你的$GOPATH/bin目錄中,查看或編輯你的~/.bash_profile文件,確保你的$GOPATH/bin目錄已經加入$PATH中:
export PATH=$PATH:$GOPATH/bin
使用gb進行項目開發
我們以一個簡單的提供HTTP頁面的“Hello World”程序來學習一下gb的使用。
為了體現gb管理第三方包依賴的特性,我們引入一個支持HTTP服務優雅重啟的第三方包 github.com/tabalt/gracehttp。

創建gb項目目錄結構:
cd ~/helloworld
mkdir -p src/helloworld
mkdir -p vendor/src
編寫“Hello World”程序

#vim src/helloworld/main.go
package main

import (
"fmt"
"net/http"

"github.com/tabalt/gracehttp"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
})

err := gracehttp.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println(err)
}
}

添加依賴的第三包
gb vendor fetch github.com/tabalt/gracehttp
項目目錄結構如下:

./
|-- src
| `-- helloworld
| `-- main.go
`-- vendor
|-- manifest
`-- src
`-- github.com
`-- tabalt
`-- gracehttp
|-- README.md
|-- connection.go
|-- gracehttpdemo
| `-- main.go
|-- listener.go
`-- server.go
編譯執行程序

gb build helloworld
./bin/helloworld
打開一個新終端並執行curl http://127.0.0.1:8080/,將會輸出:

hello world

提交所有代碼到git倉庫

git init
git add .
git commit -am 'init hello world project with gb'
git add remote -v $your_remote_git_repository
git push origin master:master
gb常用命令
在上面的項目開發中,我們用到了兩個命令gb build 和 gb vendor,實際上,build是我們之前所說的可執行文件$GOPATH/bin/gb包含的,而vendor是gb的一個插件,最終調用的是可執行文件$GOPATH/bin/gb-vendor。

可以通過gb help命令查看gb支持的更多命令,命令的具體用法可以通過gb help $command_name查看,很多gb命令都是在go命令行工具的基礎上做的包裝,用法也都相似,通過gb vendor help可以查看vendor插件具體用法,這里我們簡單列舉如下:

gb 命令列表

命令 功能
build 編譯包
doc 顯示文檔
env 打印項目的環境變量
generate 處理源代碼生成Go文件
info 顯示項目的信息
list 顯示項目下的所有包
test 執行測試
gb vendor 功能列表

參數 功能
fetch 獲取一個遠程依賴
update 更新一個本地依賴
list 每行一個列出所有依賴
delete 刪除一個本地依賴
purge 清除所有未引用的依賴
restore 從manifest清單文件還原依賴


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM