1. 程式人生 > >go語言版本控制

go語言版本控制

在使用Golang過程中,我們發現Golang程式缺少依賴庫版本功能是一個非常令人頭大的問題:某些依賴在某個commit之後發生了API變更之後,如果不修改程式碼很難相容,然而開發者之間很有可能因為參與的時間不同,導致執行 go get 命令獲取的版本不同,而導致在不同電腦上出現編譯不通過問題。同時,在多個程式中,如果使用的commit版本不同,也可能會導致程式編譯過程中出現不同的問題。

在Golang1.5之後,Go提供了 GO15VENDOREXPERIMENT 環境變數,用於將go build時的應用路徑搜尋調整成為 當前專案目錄/vendor 目錄方式。Golang在1.5版本引入了實驗性的vendoring標記GO15VENDOREXPERIMENT

,並且從1.6版本起使vendoring機制成為預設行為,不再需要額外配置

go get -u -v github.com/kardianos/govendor

首先有一個名為 test 的專案,

govendor init     #執行一下命令就可以生成vendor資料夾

govendor add +external    #執行命令將當前應用必須的檔案包含進來

下面是govendor詳細命令
[[email protected] fabric-sdk-service-pig]# govendor --help
govendor (v1.0.9): record dependencies and copy into vendor folder
    -govendor-licenses    Show govendor's licenses.
    -version              Show govendor version
    -cpuprofile 'file'    Writes a CPU profile to 'file' for debugging.
    -memprofile 'file'    Writes a heap profile to 'file' for debugging.

Sub-Commands

    init     Create the "vendor" folder and the "vendor.json" file.
    list     List and filter existing dependencies and packages.
    add      Add packages from $GOPATH.
    update   Update packages from $GOPATH.
    remove   Remove packages from the vendor folder.
    status   Lists any packages missing, out-of-date, or modified locally.
    fetch    Add new or update vendor folder packages from remote repository.
    sync     Pull packages into vendor folder from remote repository with revisions
                   from vendor.json file.
    migrate  Move packages from a legacy tool to the vendor folder with metadata.
    get      Like "go get" but copies dependencies into a "vendor" folder.
    license  List discovered licenses for the given status or import paths.
    shell    Run a "shell" to make multiple sub-commands more efficient for large
                 projects.

    go tool commands that are wrapped:
      "+status" package selection may be used with them
    fmt, build, install, clean, test, vet, generate, tool

Status Types

    +local    (l) packages in your project
    +external (e) referenced packages in GOPATH but not in current project
    +vendor   (v) packages in the vendor folder
    +std      (s) packages in the standard library

    +excluded (x) external packages explicitly excluded from vendoring
    +unused   (u) packages in the vendor folder, but unused
    +missing  (m) referenced packages but not found

    +program  (p) package is a main package

    +outside  +external +missing
    +all      +all packages

    Status can be referenced by their initial letters.

Package specifier
    <path>[::<origin>][{/...|/^}][@[<version-spec>]]

Ignoring files with build tags, or excluding packages from being vendored:
    The "vendor.json" file contains a string field named "ignore".
    It may contain a space separated list of build tags to ignore when
    listing and copying files.
    This list may also contain package prefixes (containing a "/", possibly
    as last character) to exclude when copying files in the vendor folder.
    If "foo/" appears in this field, then package "foo" and all its sub-packages
    ("foo/bar", …) will be excluded (but package "bar/foo" will not).
    By default the init command adds the "test" tag to the ignore list.

If using go1.5, ensure GO15VENDOREXPERIMENT=1 is set.







相關推薦

go語言版本控制

在使用Golang過程中,我們發現Golang程式缺少依賴庫版本功能是一個非常令人頭大的問題:某些依賴在某個commit之後發生了API變更之後,如果不修改程式碼很難相容,然而開發者之間很有可能因為參與的時間不同,導致執行 go get 命令獲取的版本不同,而導致在不同電腦上

比特幣地址生成過程 go語言版本

比特幣地址結構: 【版本 + 公鑰雜湊 + 驗證碼】 版本:預設0x00, 即可空白的一位元組。 公鑰:由非對稱加密演算法得出。 公鑰雜湊:就是給公鑰做雜湊演算法得出的結果。 驗證碼:給 [版本 + 公鑰雜湊],sha256兩次,取頭4個字元作為驗證碼。 package main

Go語言流程控制

1.條件語句 幾個注意點和C#不一樣的。 if a < 5 { return 0 } else { return 1 } ① 條件語句不需要使用括號將條件包含起來 a<5 ,C#必須有() ②無論語句體內有幾條語句,花括號{}都是必須存在的;C#如果只

解讀|TARS開源專案釋出Go語言版本

導語:近日,Tars 開源專案在上海釋出並開源了 Go 語言版本,其效能與 C++ 版本相當,比 gRPC 的效能高 5 倍。 ——編者 Tars 是騰訊開源的一款微服務框架,它於去年 4 月份開源,並於今年 6 月捐贈給了 Linux 基金會。Tars 為使用者

訊息佇列rabbitmq的五種工作模式(go語言版本

前言:如果你對rabbitmq基本概念都不懂,可以移步此篇博文查閱訊息佇列RabbitMQ 一、單發單收 二、工作佇列Work Queue 三、釋出/訂閱 Publish/Subscribe 四、路由Routing 五、Topic型別的exchange 六、rabbitmq部分封裝程式碼及裝備工作  

用樹莓派實現RGB LED的顏色控制——C語言版本

個數 hang clu 代碼 stdio.h 標準 tro color sage 用樹莓派實現RGB LED的顏色控制 RGB色彩模式是工業界的一種顏色標準。是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化

Go 語言集成開發環境 GoLand 更新至 2018.1.3 版本

集成 開發 ins 明顯 sqlite3 date rain 特定 關註 GoLand 2018.1.3 已發布,這是一個全新的更新,盡管沒有帶來明顯的針對 Go 語言的特定改進,但還是提供了許多與 UI,JavaScript 和 SQL 支持相關的錯誤修復和改進。 可通過

Go語言中的控制語句

sel pre pytho Go語言 跳轉 sele index project sleep // code_004_process_control project main.go package main import ( "fmt" "time" )

Go語言中的流程控制

表達式 err ima defer 調用棧 ofo image www 分支語句 1 概述 Go語言提供了條件分支 if,狀態分支 switch,循環 for,跳轉 goto,延遲執行 defer,這些流程控制語句。分別作說明如下: 2 條件分支 if 依據條件是否滿足確定

Go語言學習筆記(四) 流程控制

程式設計語言的流程控制語句,用於設定計算執行的次序,建立程式的邏輯結構。可以說,流程控制語句是整個程式的骨架。從根本上講,流程控制只是為了控制程式語句的執行順序,一般需要與各種條件配合,因此,在各種流程中,會加入條件判斷語句。流程控制語句一般起以下3個作用:   選擇,即根據

go語言初體驗(流程控制、range遍歷、函式、結構體、面向物件)

一、流程控制 // main package main import ( "fmt" ) func main() { x := 2 switch x { case 1: fmt.Print("beifeng 1") case 2:

go語言初體驗(流程控制、range遍歷、函數、結構體、面向對象)

需要 3.3 fmt float compute 捕獲異常 value 地址 異常處理 一、流程控制 // main package main import ( "fmt" ) func main() { x := 2 switch x {

Go語言學習筆記-流程控制(二)

Go語言流程控制 字典型別Map 1、上節遺留:map字典型別 變數宣告:var myMap map[string] PersonInfo 其中,myMap是變數名,string是鍵的型別,PersonInfo是存放的值型別 2、建立map:make() 例子: `myMap = ma

golang第二課---go語言介紹及版本檢視

跨平臺特性 Go語言和Java,Python一樣,也是支援跨平臺的。另外,Go語言還有黑科技:支援跨平臺編譯。比如你手頭只有Mac系統,而你的使用者有Linux和Windows的,他們也想使用你的Go語言程式,你可以通過交叉編譯出Linux和Windows上的可執行

golang基礎學習----go語言控制語句switch

Go 語言 switch 語句 switch 語句用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上直下逐一測試,直到匹配為止。。 switch 語句執行的過程從上至下,直到找到匹配項,匹配項後面也不需要再加break 基本結構 相比較 C 和 Jav

Go 語言的下一個大版本Go 2.0 被安排上了(全面相容1.X,改進錯誤處理和泛型這兩大主題)

今年 8 月 Go 開發團隊公佈了 Go 2.0 的設計草案,包括錯誤處理和泛型這兩大主題。現在備受矚目的 Go 2.0 又有了新動向 —— 昨日 Go 開發團隊在其官方部落格表示,Go 2 已經被安排上了!目前 Go 2 已進入確定變更提案的階段,並公佈了提案評估流程。 廢話不多說,先

Go 語言的下一個大版本Go 2.0 被安排上了(全面兼容1.X,改進錯誤處理和泛型這兩大主題)

.org leader utf8 驅動 cleanup 周期 一份 早期 下一個 今年 8 月 Go 開發團隊公布了 Go 2.0 的設計草案,包括錯誤處理和泛型這兩大主題。現在備受矚目的 Go 2.0 又有了新動向 —— 昨日 Go 開發團隊在其官

Go 語言的下一個大版本Go 2.0 被安排上了!

今年 8 月 Go 開發團隊公佈了 Go 2.0 的設計草案,包括錯誤處理和泛型這兩大主題。現在備受矚目的 Go 2.0 又有了新動向 —— 昨日 Go 開發團隊在其官方部落格表示,Go 2 已經被安排上了!目前 Go 2 已進入確定變更提案的階段,並公佈了提案評估流程。 廢話不多

一、go語言基礎流程控制,語法,反射特性--go語言筆記

for迴圈 sum := 1 for ; sum < 1000; { sum += sum } for sum<1000{ sum ++ } 在第5行中,我們把很多值聚合在了一個case裡面,同時,Go裡面switch預設

Go語言中如何控制併發

下面這個例子併發列印slice中的每個值(可以檢視上一篇介紹的for..range瞭解其他細節) var wg sync.WaitGroup var s []int = []int{1, 2, 3, 4, 5, 6} for _, value := ra