1. 程式人生 > >用 golang 1.11 module 做專案版本管理

用 golang 1.11 module 做專案版本管理

go 1.11 有了對模組的實驗性支援,大部分的子命令都知道如何處理一個模組,比如 run build install get list mod
子命令,第三方工具可能會支援的晚一些。到 go 1.12 會刪除對 GOPATH
的支援, go get命令也會變成只能獲取模組,不能像現在這樣直接獲取一個裸包。

可以用環境變數 GO111MODULE
開啟或關閉模組支援,它有三個可選值: off、 on、 auto,預設值是 auto

  • GO111MODULE=off
    無模組支援,go 會從 GOPATH 和 vendor 資料夾尋找包。
  • GO111MODULE=on
    模組支援,go 會忽略 GOPATH 和 vendor 資料夾,只根據 go.mod
    下載依賴。
  • GO111MODULE=auto
    在 $GOPATH/src外面且根目錄有 go.mod檔案時,開啟模組支援。

在使用模組的時候, GOPATH是無意義的,不過它還是會把下載的依賴儲存在 $GOPATH/src/mod
中,也會把 go install的結果放在 $GOPATH/bin中。

定義模組

模組根目錄和其子目錄的所有包構成模組,在根目錄下存在 go.mod檔案,子目錄會向著父目錄、爺目錄一直找到 go.mod檔案。

模組路徑指模組根目錄的匯入路徑,也是其他子目錄匯入路徑的字首。 go.mod檔案第一行定義了模組路徑,有了這一行才算作是一個模組。

go.mod
檔案接下來的篇幅用來定義當前模組的依賴和依賴版本,也可以排除依賴和替換依賴。

module example.com/m 

require (
    golang.org/x/text v0.3.0
    gopkg.in/yaml.v2 v2.1.0 
)

replace (
    golang.org/x/text => github.com/golang/text v0.3.0
)

這個檔案不用手寫,可以用 go mod -init -module example.com/m生成 go.mod的第一行,檔案的剩餘部分也不用擔心,在執行 go build、 go test、 go list命令時會根據需要的依賴自動生成 require語句。

官方建議經常維護這個檔案,保持依賴項是乾淨的。對於國內使用者來說,手動維護這個檔案是必然的,因為你需要把 golang.org/x/text

替換成 github.com/golang/text啊。不需要像以前那樣以 hack 的方式替換 GOPATH中的依賴,我一開始還保持著老思維,居然想要去替換模組的下載快取,不過如果用 GOPROXY 功能也確實可以做到替換。

go list 命令

  • go list -m
    可以檢視當前的依賴和版本

go mod 命令

這個子命令用來處理 go.mod檔案,上一小節我們已經見過 go mod -init了。

  • go mod -fmt
    格式化 go.mod檔案。
  • go mod -sync
    從 go.mod刪除不需要的依賴、新增需要的依賴,這個操作不會改變依賴版本。
  • go mod [email protected]
    新增依賴或修改依賴版本,這裡支援模糊匹配版本號,詳情可以看下文 go get的用法。
  • go mod -vendor
    生成 vendor 資料夾。

其他的自行 go help mod檢視。

go get 命令

獲取依賴的特定版本,用來升級和降級依賴。可以自動修改 go.mod檔案,而且依賴的依賴版本號也可能會變。在 go.mod
中使用 exclude排除的包,不能 go get下來。

與以前不同的是,新版 go get可以在末尾加 @符號,用來指定版本。

它要求倉庫必須用 v1.2.0格式打 tag,像 v1.2少個零都不行的,必須是 語義化的、帶 v字首的版本號。

go get github.com/gorilla/mux    # 匹配最新的一個 tag
go get github.com/gorilla/[email protected]    # 和上面一樣
go get github.com/gorilla/[email protected]    # 匹配 v1.6.2
go get github.com/gorilla/[email protected] # 匹配 v1.6.2
go get github.com/gorilla/[email protected]   # 匹配 c85619274f5d
go get github.com/gorilla/[email protected]    # 匹配 master 分支

latest
匹配最新的 tag。

v1.2.6
完整版本的寫法。

v1、 v1.2
匹配帶這個字首的最新版本,如果最新版是 1.2.7,它們會匹配 1.2.7

c856192
版本 hash 字首、分支名、無語義化的標籤,在 go.mod裡都會會使用約定寫法 v0.0.0-20180517173623-c85619274f5d
,也被稱作偽版本。

go get
可以模糊匹配版本號,但 go.mod檔案只體現完整的版本號,即 v1.2.0、 v0.0.0-20180517173623-c85619274f5d
,只不過不需要手寫這麼長的版本號,用 go get或上文的 go mod -require模糊匹配即可,它會把匹配到的完整版本號寫進 go.mod檔案。

go build 命令

go build -getmode=vendor
在開啟模組支援的情況下,用這個可以退回到使用 vendor 的時代。

相關推薦

golang 1.11 module 專案版本管理

go 1.11 有了對模組的實驗性支援,大部分的子命令都知道如何處理一個模組,比如 run build install get list mod 子命令,第三方工具可能會支援的晚一些。到 go 1.12 會刪除對 GOPATH 的支援, go get命令也會變成只能獲取模組,

Go 1.11 Module 介紹

自己 vendor ext tle gopath get 根目錄 pkg 三方 title: "Go 1.11 Module" date: 2018-10-26T23:50:56+08:00 draft: false --- Go 1.11 Modul

如何在CentOS 7.5、Ubuntu 18.04和Debian 9中安裝Golang 1.11

Golang 是谷歌開發的一種程式語言。由於它的多功能性、簡單性和可靠性,  Golang 已經成為開源社群中最受歡迎的程式語言之一。 準備: 一個虛擬機器中的 CentOS 7 ,  Ubuntu 18.04 LTS ,或者  Debian 9 擴充套件 

從0到1帶人專案

專案:在既定的資源和要求的約束條件下,為實現某種目的而相互聯絡的一次性工作。 專案成功的三個要素: 1、必勝的信念 2、正確的資訊同步 3、可靠的人力 專案風險往往在如下幾方面 一、資訊同步 尤其是跟外部團隊合作時,資訊同步是重中之重。明確整體專案的目標,清楚自己所在的細分專案在整體專案中所處的

2019.1.11-25 6.828的lab2

建立 虛擬地址 就是 頁表 部分 blank www .com 比較 這個lab內容其實不算太多,不過我斷斷續續的做了有兩個禮拜的樣子。 基本分為三個部分,第一部分是首先建立一個物理頁的結構,第二部分是寫一些操作頁表的函數, 寫到這裏會有點困惑,寫這些是幹嘛的,然後到第三部

Ubuntu 16.04 安裝golang 1.11 踩過的坑

本來不想寫了,但是作為一個Linux新手來說,還是寫一下,免得後來者繼續踩坑,我的VMware是14,安裝的golang此時是最新的 在Linux上安裝軟體,可能不像我們平時在Windows上那樣,有許多的不同,我介紹兩種安裝方法,但是我建議使用第一種,為什麼,我說到第二種

完美解決--VS中的Git代碼管理器,與他人共享代碼

服務 git 新建 註冊郵箱 一起 下載 代碼管理 svn 進行 1、創建代碼倉庫,這裏說一下為什麽要創建倉庫,Git不能夠作為源代碼管理器,vs中自帶的也只能夠在本地進行管理,要和他們共享的話必須要有服務器端去存儲代碼,類似於SVN,它就有客戶端和服務器端,這裏推薦用Gi

SVN 專案版本管理之trunk(主線) branch(分支) tag(標記)使用

應用場景: 優異的跨平臺支援,對windows平臺支援非常友好。 簡單易用,安裝後稍微培訓下就知道怎麼操作。 程式碼,需求,文件,涉及稿都可以用svn進行管理,適合不同部門的技術非技術的同事協作。 當研發成本比較低,協作開發人數不多,開發人員對於版本管理的水平參差不齊

Voyager 1.1.11 釋出,Laravel 後臺管理擴充套件包

   Voyager 1.1.11 釋出了,Voyager 是一個強大、快捷的 Laravel 後臺管理擴充套件包,提供了 CRUD 操作、媒體管理、選單構建與資料管理等功能。 此次更新內容包括: 使用 mb_substr(...) 而不是 substr(...)

使用git進行專案版本管理

為規範原始碼版本管理,現將各分支表述如下:1.master分支 存放的應該是隨時可供在生產環境中部署的程式碼 當開發活動告一段落,產生了一份新的可供部署的程式碼時,master分支上的程式碼會被更新。同時,每一次更新,都有對應的版本號標籤(TAG)。 分支命名:master 

網際網路創業公司基於Gitlab/Jenkins的專案版本管理方案

網際網路創業公司基於Gitlab/Jenkins的專案版本管理方案 關於Gitlab 關於Jenkins 關於創業公司侷限性 Git管理方案 六大分支介紹 master develop relea

Spring Cloud 入門教程(二): IDE配置專案版本管理工具--GIT

學習之前確保在在IDE工具中都已整合好GIT進來。已整合請忽略以下內容~~~ Eclipse整合GIT方法: 首先開啟Eclipse,然後點選Help>Install New Software  點選Add,Name:EGit  Location: htt

大數據DDos檢測——DDos攻擊本質上是時間序列數據,t+1時刻的數據特點和t時刻強相關,因此HMM或者CRF來檢測是必然! 和一個句子的分詞算法CRF沒有區別!

科學 設計 區別 背景 file 最優化 model 安全 學習 DDos攻擊本質上是時間序列數據,t+1時刻的數據特點和t時刻強相關,因此用HMM或者CRF來做檢測是必然!——和一個句子的分詞算法CRF沒有區別!註:傳統DDos檢測直接基於IP數據發送流量來識別,通過硬件

django 1.11.1版本使用xadmin

form XA brush wid AS cmt 文件創建 imp pps 一[安裝]: 1.下載分支版本 https://github.com/nocmt/Xadmin1.11.x/archive/master.zip 2.解壓,並將其放在site-package下 然後

centos7使用kubeadm安裝kubernetes 1.11版本多主高可用

ips refresh www ember issues abi dash iyu let centos7使用kubeadm安裝kubernetes 1.11版本多主高可用 [TOC] kubernetes介紹要學習一個新的東西,先了解它是什麽,熟悉基本概念會有很大幫助。以

golang 發布 1.11,帶來新特性 modules

替代 align 初步 src middle 成了 idt int 增加 美國當地時間8月24日,Go 開發團隊宣布推出 Go 1.11 正式版。 下載地址:https://golang.org/dl/ 國內下載地址:https://golang.google.cn/dl

小哥Python兼職月入過萬,Python專案有多賺錢?

  加python程式語言學習QQ群 515267276即可自動獲取大量Python視訊教程以及各類PDF! 今天給大家分享一下2位前輩業餘接兼職做的一些Python專案。號主在這裡想說,無論你是自學還是進培訓班,只要把Python學好,錢自然而來。   問

如何用ABP框架快速完成專案(5) - ABP一個人快速完成專案(1) - 使用程式碼生成器

用ABP一個人快速完成專案有如下要點: 站在巨人的肩膀上 - 使用程式碼生成器 站在巨人的肩膀上 - 使用成熟控制元件框架, 一個框架不夠就上兩個, 兩個不夠就上三個 通過微服務模式而不是蓋樓式來避免難度升級 運用BDD/TDD等先進方法論 運用DevOps 注

centos7使用kubeadm安裝kubernetes 1.11版本多主高可用_Kubernetes中文社群

大佬,你好,照著這個方法搭建的成功後,卻無法使用heapster監控,部署後報錯heapster容器報錯 I0816 10:04:59.743015 1 heapster.go:72] /heapster –source=kubernetes:https://kubernetes.default

K8S運維筆記-單節點叢集安裝(1.11版本)

使用kubeadm安裝K8S 安裝kubeadm 更新安裝源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] nam