Go語言之依賴管理

go module

go module是Go1.11版本之后官方推出的版本管理工具,并且從Go1.13版本開始,go module將是Go語言默認的依賴管理工具。

GO111MODULE

要啟用go module支持首先要設置環境變量GO111MODULE
通過它可以開啟或關閉模塊支持,它有三個可選值:off、on、auto,默認值是auto。

GO111MODULE=off禁用模塊支持,編譯時會從GOPATH和vendor文件夾中查找包。
GO111MODULE=on啟用模塊支持,編譯時會忽略GOPATH和vendor文件夾,只根據 go.mod下載依賴。
GO111MODULE=auto,當項目在$GOPATH/src外且項目根目錄有go.mod文件時,開啟模塊支持。
簡單來說,設置GO111MODULE=on之后就可以使用go module了,以后就沒有必要在GOPATH中創建項目了,并且還能夠很好的管理項目依賴的第三方包信息。

使用 go module 管理依賴后會在項目根目錄下生成兩個文件go.mod和go.sum

GOPROXY

Go1.11之后設置GOPROXY命令為:

export GOPROXY=https://goproxy.cn

Go1.13之后GOPROXY默認值為https://proxy.golang.org,在國內是無法訪問的,所以十分建議大家設置GOPROXY,這里我推薦使用goproxy.cn

go env -w GOPROXY=https://goproxy.cn,direct

go mod命令

常用的go mod命令如下:

go mod download    下載依賴的module到本地cache(默認為$GOPATH/pkg/mod目錄)
go mod edit        編輯go.mod文件
go mod graph       打印模塊依賴圖
go mod init        初始化當前文件夾, 創建go.mod文件
go mod tidy        增加缺少的module,刪除無用的module
go mod vendor      將依賴復制到vendor下
go mod verify      校驗依賴
go mod why         解釋為什么需要依賴

go.mod

go.mod文件記錄了項目所有的依賴信息,其結構大致如下:

module github.com/Q1mi/studygo/bloggergo 1.12require (github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586github.com/gin-gonic/gin v1.4.0github.com/go-sql-driver/mysql v1.4.1github.com/jmoiron/sqlx v1.2.0github.com/satori/go.uuid v1.2.0google.golang.org/appengine v1.6.1 // indirect
)

其中,

  • module用來定義包名
  • require用來定義依賴包及版本
  • indirect表示間接引用

依賴的版本

go mod支持語義化版本號,比如go get foo@v1.2.3,也可以跟git的分支或tag,比如go get foo@master,當然也可以跟git提交哈希,比如go get foo@e3702bed2。關于依賴的版本支持以下幾種格式:

gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
gopkg.in/vmihailenco/msgpack.v2 v2.9.1
gopkg.in/yaml.v2 <=v2.2.1
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
latest

replace

在國內訪問golang.org/x的各個包都需要翻墻,你可以在go.mod中使用replace替換成github上對應的庫。

replace (golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dacgolang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638dgolang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)

go get

在項目中執行go get命令可以下載依賴包,并且還可以指定下載的版本。

  • 運行go get -u將會升級到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號, y是次要版本號)
  • 運行go get -u=patch將會升級到最新的修訂版本
  • 運行go get package@version將會升級到指定的版本號version

如果下載所有依賴可以使用go mod download命令

整理依賴

我們在代碼中刪除依賴代碼后,相關的依賴庫并不會在go.mod文件中自動移除。這種情況下我們可以使用go mod tidy命令更新go.mod中的依賴關系

go mod edit

格式化

因為我們可以手動修改go.mod文件,所以有些時候需要格式化該文件。Go提供了一下命令

go mod edit -fmt
添加依賴項
go mod edit -require=golang.org/x/text
移除依賴項

如果只是想修改go.mod文件中的內容,那么可以運行go mod edit -droprequire=package path,比如要在go.mod中移除golang.org/x/text包,可以使用如下命令:

go mod edit -droprequire=golang.org/x/text

關于go mod edit的更多用法可以通過go help mod edit查看。

在項目中使用go module

既有項目

如果需要對一個已經存在的項目啟用go module,可以按照以下步驟操作:

  1. 在項目目錄下執行go mod init,生成一個go.mod文件。
  2. 執行go get,查找并記錄當前項目的依賴,同時生成一個go.sum記錄每個依賴庫的版本和哈希值。
新項目

對于一個新創建的項目,我們可以在項目文件夾下按照以下步驟操作:

  1. 執行go mod init 項目名命令,在當前項目文件夾下創建一個go.mod文件。
  2. 手動編輯go.mod中的require依賴項或執行go get自動發現、維護依賴。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40814.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker搭建LNMP

docker安裝 略 下載鏡像 nginx:最新版php-fpm:根據自己需求而定mysql:根據自己需求定 以下是我搭建LNMP使用的鏡像版本 rootVM-12-16-ubuntu:/docker/lnmp/php/etc# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8.0…

Linux的基本權限(文件,目錄)

文章目錄 前言一、Linux權限的概念二、Linux權限管理 1.文件訪問者分類2.文件類型和訪問類型3.文件訪問權限的相關設置方法三、目錄的權限四、權限的總結 前言 Linux下一切皆文件&#xff0c;指令的本質就是可執行文件&#xff0c;直接安裝到了系統的某種路徑下 一、Linux權限的…

embed mongodb 集成spring

在property文件下添加 de.flapdoodle.mongodb.embedded.version5.0.5 spring.mongodb.embedded.storage.oplog-size0不指定數據庫&#xff0c;會使用test&#xff0c; port默認是0&#xff0c;隨機端口號。 oplog-size mac默認是192mb, 其他系統會使用5%的磁盤可用空間&#x…

SpringCloud實用篇6——elasticsearch搜索功能

目錄 1 DSL查詢文檔1.1 DSL查詢分類1.2 全文檢索查詢1.2.1 使用場景1.2.2 基本語法1.2.3 示例1.2.4 總結 1.3 精準查詢1.3.1 term查詢1.3.2 range查詢1.3.3 總結 1.4.地理坐標查詢1.4.1 矩形范圍查詢1.4.2 附近查詢 1.5 復合查詢1.5.1 相關性算分1.5.2 算分函數查詢1&#xff0…

Python 字節碼指令 LOAD_DEREF

LOAD_DEREF 是 Python 字節碼指令&#xff0c;它與閉包和嵌套函數有關。要理解 LOAD_DEREF&#xff0c;我們首先需要了解 Python 中的幾個概念&#xff1a;cell、free variable 和閉包。 Cell 和 Free Variables: 當一個嵌套函數引用了其上級作用域中的一個變量&#xff0c;但該…

【大數據Hive】hive 事務表使用詳解

目錄 一、前言 二、Hive事務背景知識 hive事務實現原理 hive事務原理之 —— delta文件夾命名格式 _orc_acid_version 說明 bucket_00000 合并器(Compactor) 二、Hive事務使用限制 參數設置 客戶端參數設置 客戶端參數設置 三、Hive事務使用操作演示 操作步驟 客…

(已解決)redis.get報錯com.alibaba.fastjson.JSONException: autoType is not support

redis存取值問題&#xff0c;存自定義實體對象&#xff1b; 第一次取的時候報錯&#xff1a;com.alibaba.fastjson.JSONException: autoType is not support。 GenericFastJsonRedisSerializer序列化和反序列化redis的value值&#xff0c;需要bean對象含有無參構造方法。 解決…

【C語言】回調函數,qsort排序函數的使用和自己實現,超詳解

文章目錄 前言一、回調函數是什么二、回調函數的使用1.使用標準庫中的qsort函數2.利用qsort函數對結構體數組進行排序 三、實現qsort函數總結 先記錄一下訪問量突破2000啦&#xff0c;謝謝大家支持&#xff01;&#xff01;&#xff01; 這里是上期指針進階鏈接&#xff0c;方便…

金融術語總結

洗錢 將犯罪或其他非法違法行為所獲得的違法收入&#xff0c;通過各種手段掩飾、隱瞞、轉化&#xff0c;使其在形式上合法化的行為。 存量客戶 某個時間段里原先已有的客戶,與新增客戶相對應。 月活躍用戶數量&#xff0c;MAU&#xff08;Monthly Active User&#xff0c;M…

【go語言基礎】go中的方法

先思考一個問題&#xff0c;什么是方法&#xff0c;什么是函數&#xff1f; 方法是從屬于某個結構體或者非結構體的。在func這個關鍵字和方法名中間加了一個特殊的接收器類型&#xff0c;這個接收器可以是結構體類型的或者是非結構體類型的。從屬的結構體獲取該方法。 函數則…

【100天精通python】Day37:GUI界面編程_PyQT從入門到實戰(上)

目錄 專欄導讀 1 PyQt6 簡介&#xff1a; 1.1 安裝 PyQt6 和相關工具&#xff1a; 1.2 PyQt6 基礎知識&#xff1a; 1.2.1 Qt 的基本概念和組件&#xff1a; 1.2.2 創建和使用 Qt 窗口、標簽、按鈕等基本組件 1.2.3 布局管理器&#xff1a;垂直布局、水平布局、網格布局…

typedef函數代碼段解釋以及部分Windows下的系統函數

文章目錄 1、typedef int (WINAPI* LPSDOLInitialize)(const SDOLAppInfo* pAppInfo)2、typedef int (WINAPI* LPSDOLGetModule)(REFIID riid, void** intf)3、typedef int (WINAPI* LPSDOLTerminal)();4、GetProcAddress運行時獲取一個動態鏈接庫&#xff08;DLL&#xff09;中…

mysql與redis區別

mysql和redis的數據庫類型 mysql是關系型數據庫&#xff0c;主要用于存放持久化數據&#xff0c;將數據存儲在硬盤中&#xff0c;讀取速度較慢。 redis是NOSQL&#xff0c;即非關系型數據庫&#xff0c;也是緩存數據庫&#xff0c;即將數據存儲在緩存中&#xff0c;緩存的讀取速…

網絡

mcq Java 傳輸層&#xff1a;拆分和組裝&#xff0c;完成端到端的消息傳遞&#xff0c;流量控制&#xff0c;差錯控制等 網絡層&#xff1a; 尋址、路由&#xff0c;復用&#xff0c;擁塞控制&#xff0c;完成源到宿的傳遞。 顯然A選項是錯誤的&#xff0c;有流量控制的是傳輸層…

JavaScript TypeScript

文章目錄 JavaScript語法事件處理與HTML和CSS集成前端框架和庫 TypeScript靜態類型檢查語法更好的可維護性 包管理工具npmpnpmyarnBower JavaScript JavaScript&#xff08;簡稱JS&#xff09;是一種廣泛應用于網頁開發的腳本語言。它被用來為網頁增加交互性和動態功能。以下是…

netty學習分享(一)

TCP與UDP TCP 是面向連接的、可靠的流協議&#xff0c;通過三次握手建立連接&#xff0c;通訊完成時要拆除連接。 UDP是面向無連接的通訊協議&#xff0c;UDP通訊時不需要接收方確認&#xff0c;屬于不可靠的傳輸&#xff0c;可能會出現丟包現象 端口號&#xff1a; 端口號用…

【微信小程序】記一次自定義微信小程序組件的思路

最近來個需求&#xff0c;要求給小程序的 modal 增加個關閉按鈕&#xff0c;上網一查發現原來 2018 年就有人給出解決方案了&#xff0c;于是總結下微信小程序自定義組件的思路&#xff1a;一句話&#xff0c;用 wxml css實現和原生組件類似的樣式和效果&#xff0c;之后用 JS…

【uniapp】uniapp設置安全區域:

文章目錄 一、效果圖:二、實現代碼: 一、效果圖: 二、實現代碼: {"path": "pages/index/index","style": {"navigationStyle": "custom","navigationBarTextStyle": "white","navigationBarTitle…

消息隊列學習筆記

消息隊列基礎 適合消息隊列解決的問題 異步處理&#xff1a;處理完關鍵步驟后直接返回結果&#xff0c;后續放入隊列慢慢處理流量控制&#xff1a; 使用消息隊列隔離網關和后端服務&#xff0c;以達到流量控制和保護后端服務的目的。能根據下游的處理能力自動調節流量&#x…

leetcode做題筆記79單詞搜索

給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構成&#xff0c;其中“相鄰”單元格是那些水平相鄰或垂直相…