go mod教程、go module

什么是go mod

go mod 是go語言的包管理工具,類似java 的maven,go mod的出現可以告別goPath,使用go module來管理項目,有了go mod賬號就不需要非得把項目放到gopath/src目錄下了,你可以在磁盤的任何位置新建一個項目

go mod在go語言的1.11版本后推出,但是在早期,go mod 非常難用,被廣大的開發者所詬病;現在已經好了很多了

常用命令

通過命令go mod help 可以看到有go mod有以下幾個命令

  • download :下載module到本地緩存,下載到GOMODCACHE指定的路徑
  • edit: 編輯
  • graph :以文本形式打印模塊需求圖
  • init :創建go mod 項目
  • tidy 添加缺失module,或者去除沒有使用的module
  • vendor 將項目的依賴庫下載到項目內部,作為項目的一部分來編譯。
  • verify 驗證依賴是否正確
  • why explain why packages or modules are needed

下載依賴 go get方式

go get命令會下載指定的包,并將下載的包進行編譯,然后安裝到特定目錄。

go get  github.com/go-redis/redis

除此之外,go get還提供以下幾個參數

  • -d :只下載不安裝
  • -f :只有在你包含了 -u 參數的時候才有效,不讓 -u 去驗證 import 中的每一個都已經獲取了,這對于本地 fork 的包特別有用
  • -t :同時也下載需要為運行測試所需要的包
  • -u :強制使用網絡去更新包和它的依賴包
  • -v :顯示執行的命令

下載依賴 go.mod方式

在mod文件中添加 require(依賴鏈接 版本號) 即可,示例:

module demo_94_tailgo 1.17require (github.com/hpcloud/tail v1.0.0 // indirect
)

添加完成后在執行以下命令即可將依賴下載到本地

go mod download 

查看go mod狀態

go env

找到以下的配置項就是go mod的配置,為什么叫 GO111MODULE 呢,中間的111是因為從1.11版本后推出的功能,

set GO111MODULE=on

設置代理

默認的代理是GOPROXY=https://proxy.golang.org,direct,但是這個鏈接是國外的網站,得翻墻才能用,所以我們用國內的代理

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

開啟/關閉go mod

GO111MODULE 有三種狀態

  • on : 開啟
  • off : 關閉
  • auto :默認值,go命令會根據當前目錄來決定是否啟用module功能

開啟 go mod

go env -w GO111MODULE=on

關閉 go mod

go env -w GO111MODULE=off

download 下載

下載module到本地緩存,下載到GOMODCACHE指定的路徑,可通過go env -w GOMODCACHE=/xxx/xxx修改cache路徑

go mod download

edit 編輯go.mod文件

# -replace 表示 包下載不下來的時候使用,--replace=新地址=下載不下來的地址
go mod edit -replace golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest# -exclude 表示排除某個包
go mod edit -exclude golang.org/x/crypto@v0.0.0# -require 表示導入某個包
go mod edit -require golang.org/x/crypto@v0.0.0# -json 以json方式打印go.mod 模塊對象
go mod edit -json

graph

以文本形式打印模塊需求圖

go mod graph

init 創建go mod 項目

進入項目目錄下,執行以下命令,其中projectName 是你的項目名稱, 建議和目錄一致

go mod init projectName

執行完后會自動創建一個go.mod的文件,內容如下

module xx.xx.com/xd/projectNamego 1.14

tidy

添加缺失module,或者去除沒有使用的module

go mod tidy

vendor

將項目的依賴庫下載到項目內部,作為項目的一部分來編譯。此時會生產一個vendor的目錄,一般情況下都用不上

go mod vendor

verify

驗證依賴是否正確

go mod verify

why

查找依賴

go mod  why

打包編譯

go build 編譯

go build命令會編譯包及其依賴,生成的文件存放在當前目錄下。而且go build只對main包有效,其他包不起作用

go build

go install 編譯并安裝

和go build命令比較相似,go install對于非main包會生成靜態文件放在GOPATH/pkg目錄下,文件擴展名為a。如果為main包,則會在GOPATH/pkg目錄下,文件擴展名為a。如果為main包,則會在GOPATH/pkg目錄下,文件擴展名為a。如果為main包,則會在GOPATH/bin下生成一個和給定包名相同的可執行二進制文件。

go install
go build 、go install、go get 區別
  • go build: go build命令是在當前目錄編譯生成可執行文件,注意 go build 指令會調用所有引用包的源碼進行重新編譯而不是使用之前pkg里的文件
  • go install: 執行 go install 命令會完成類似 go build 的功能 ,但go install 命令執行生成的可執行文件是在【$GOPATH/bin】目錄中
  • go get: 該命令可以理解為兩個操作 git clone + go install , 執行會將遠程代碼clone 到【$GOPATH/src】 目錄中

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

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

相關文章

150-SWT-MCNN-BiGRU-Attention分類預測模型等!

150-SWT-MCNN-BiGRU-Attention分類預測模型!基于多尺度卷積神經網絡(MCNN)雙向長短期記憶網絡(BiGRU)注意力機制(Attention)的分類預測模型,matlab代碼,直接運行使用!1、模型介紹:針對傳統方法在噪聲環境下診斷精度低的問題&#…

MySQL數據一致性與主從延遲深度解析:從內核機制到生產實踐

在高并發分布式系統中,數據一致性與復制延遲如同硬幣的兩面。本文深入剖析MySQL持久化機制與主從同步原理,并提供可落地的調優方案。一、數據持久化核心機制:雙日志協同 1. Redo Log:崩潰恢復的生命線刷新策略(innodb_…

【I】題目解析

目錄 單選題 多選題 判斷題 單選題 1.reg[7:0]A; A2hFF;則A() A.8b11111110 B.8b03 C.8b00000011 D.8b11111111 C 2hFF實際上等效于2位二進制2b11,賦值給8位寄存器A之后,低位賦值,高位補0 A8b00000011 AMD FPG…

《Foundation 面板:設計、功能與最佳實踐解析》

《Foundation 面板:設計、功能與最佳實踐解析》 引言 在當今數字化時代,用戶界面(UI)設計的重要性不言而喻。其中,Foundation 面板作為一種流行的前端框架,因其靈活性和高效性而被眾多開發者所青睞。本文將深入解析 Foundation 面板的設計理念、功能特點以及最佳實踐,…

React服務端渲染 Next 使用詳解

1. Next.js 概述 Next.js 是一個基于 React 的開源框架,專注于服務器端渲染(SSR)和靜態站點生成(SSG),提供開箱即用的 SSR 功能,簡化 React 應用的開發與部署。 2. Next.js 的核心特性 SSR 支…

Deforum Stable Diffusion,輕松實現AI視頻生成自由!

摘要: 你是否曾被那些充滿想象力、畫面流暢的AI視頻所震撼?你是否也想親手創造出屬于自己的AI動畫?本文將為你提供一份“保姆級”的詳盡教程,從環境配置到參數調整,一步步帶你復現強大的Deforum Stable Diffusion模型&…

不同環境安裝配置redis

不同環境安裝配置redis windows 環境安裝redis redis所有下載地址 windows版本redis下載(GitHub): https://github.com/tporadowski/redis/releases (推薦使用)https://github.com/MicrosoftArchive/redis/releases]官…

匯川Easy系列PLC算法系列(回溯法ST語言實現)

Easy系列PLC 3次多項式軌跡插補算法 Easy系列PLC 3次多項式軌跡插補算法(完整ST代碼)_plc連續插補算法-CSDN博客文章瀏覽閱讀122次。INbExecuteBOOLOFFOFF不保持1INrStartPosREAL0.0000000.000000不保持起始位置unit2INrEndPosREAL0.0000000.000000不保持結束位置unit3INrStar…

Linux C:構造數據類型

目錄 一、結構體(struct) 1.1類型定義 1.2 結構體變量定義 1.3 結構體元素初始化 1.4 結構體成員訪問 1.5 結構體的存儲(內存對齊) 1.6 結構體傳參 本文主要記錄了C語言中構造數據類型部分的內容,今天暫時只寫了…

Python:self

在Python面向對象編程中,self是一個指向類實例自身的引用參數:?1. 本質與作用??身份標識?:self是類實例化后對象的"身份證",代表當前實例本身,用于區分不同實例的屬性和方法??自動傳遞?:調…

【SpringMVC】SpringMVC的概念、創建及相關配置

什么是SpringMVC 概述 中文翻譯版:Servlet 棧的 Web 應用 Spring MVC是Spring Framework的一部分,是基于Java實現MVC的輕量級Web框架。 查看官方文檔:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.h…

淺談存儲過程

問題引入 面試的時候有時候會問到知不知道存儲過程,用沒用過? 是什么 存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在數據庫中,一次編譯后永久…

maven optional 功能詳解

前言 最近參與了一個項目,使用maven管理依賴.項目拆分了很多模塊.然后交個多個團隊各自開發.最后在一個項目骨架中,把各自的模塊引入進來,一起啟動. 后來隨著項目的深入.引入的jar包變多.發現 jar包太多,編譯太慢, 打包之后的war包非常大.這種情況就可以使用optional來優化什么…

Python基礎--Day04--流程控制語句

流程控制語句是計算機編程中用于控制程序執行流程的語句。它們允許根據條件來控制代碼的執行順序和邏輯,從而使程序能夠根據不同的情況做出不同的決策。流程控制實現了更復雜和靈活的編程邏輯。 順序語句 順序語句是按照編寫的順序依次執行程序中的代碼。代碼會按照…

【同濟大學】雙速率自動駕駛架構LeAD:端到端+LLM,CARLA實測93%路線完成率,性能SOTA!

近年來,隨著端到端的技術快速發展將自動駕駛帶到了一個新高度,并且取得了非常亮眼的成績。由于感知限制和極端長尾場景下訓練數據覆蓋不足,模型在高密度復雜交通場景下和不規則交通情況下的處理能力不足,導致在開放道路上大規模部…

github與git新手教程(快速訪問github)

0 序言 作為一個開發者,你必須知道github和git是什么,怎么使用。 github是一個存儲代碼等資源的遠程倉庫,一個大型項目往往需要很多人共同協作開發,而大家如何協同開發的進度與分工等要求需要有一個統一開放保存代碼的平臺。git…

Windows環境下安裝Python和PyCharm

可以只安裝PyCharm嗎?不可以!!! 開發Python應用程序需要同時安裝Python和PyCharm。Python是一種編程語言,PyCharm是一個專門為Python開發設計的集成開發環境,提供豐富的功能以簡化編碼過程。 一、前期準備…

Qt 嵌入式系統資源管理

在嵌入式系統中,資源(CPU、內存、存儲、網絡等)通常非常有限,因此高效的資源管理對 Qt 應用的穩定性和性能至關重要。本文從內存優化、CPU 調度、存儲管理到電源控制,全面解析 Qt 嵌入式系統資源管理的關鍵技術。 一、…

小杰數據結構(one day)——心若安,便是晴天;心若亂,便是陰天。

1.數據結構計算機存儲、組織數據的方式;有特定關系的數據元素集合;研究數據的邏輯結構、物理結構(真實存在)和對應的算法;新結構仍保持原結構類型;選擇更高的運行或存儲效率的數據結構。邏輯結構——面向問…

力扣面試150(44/150)

7.30 155. 最小棧 設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂…