go.work

一般學習一個小東西時,無非兩點,1、怎么用??2、為啥用?

在寫一個小的項目demo時,忽然看到一個奇怪的東西“go.work”?這是啥?

好奇😯,想知道。

我是這么問AI的:

go.work的簡單概念,簡單運用,請舉例。如果要創建好幾個包,要把大綱給我列出來

第2次復習留言:
因為不同模塊(mod)之間無法直接調用函數。
若需要調用函數,也需要replace去替換。
而在多個mod的根目錄,設計一個go.work,則可直接調用不同mod內的函數。
簡單、方便。

簡答運用

go.work?是 Go 語言從?Go 1.18?版本開始引入的工作區(workspace)功能,用于管理 多個模塊(packages) 的開發環境。它允許你在不修改?go.mod?文件的情況下,臨時將多個本地模塊關聯起來,特別適合大型項目或微服務架構的開發。

核心概念

  • 工作區文件go.work?文件位于項目根目錄,用于聲明多個本地模塊的路徑。
  • 模塊路徑覆蓋:通過?use?指令指定本地模塊路徑,使 Go 命令優先使用本地代碼而非遠程依賴。
  • 多模塊開發:無需提交未完成的代碼到版本庫,即可在多個模塊間協同開發。

簡單用法示例

假設你有兩個本地模塊:

  1. myapp(主應用)
  2. mylib(共享庫)

步驟 1:創建項目結構

my-project/├── myapp/│   ├── go.mod│   └── main.go└── mylib/├── go.mod└── utils.go

步驟 2:初始化?go.work

在項目根目錄執行:

go work init ./myapp ./mylib

這會生成?go.work?文件,內容如下:

go 1.18use (./myapp./mylib
)

步驟 3:在?myapp?中引用?mylib

在?myapp/main.go?中導入?mylib

為什么要用?

Go 模塊之間無法直接相互調用函數,而需要?go.work?或其他機制(如?replace?指令)的根本原因在于?Go 語言的依賴管理機制。下面從設計原理、問題場景和解決方案三個方面詳細解釋:

一、Go 模塊的依賴解析規則

Go 語言從?1.11 版本引入了模塊(module)系統,核心設計目標是:

  1. 版本確定性:通過?go.mod?文件精確記錄依賴的版本,確保 “一次構建,到處相同”。
  2. 語義化導入路徑:導入路徑必須包含版本信息(如?example.com/mylib/v2)。
  3. 最小版本選擇(Minimal Version Selection):多個依賴引用同一模塊時,使用最低兼容版本。

問題場景:假設你有兩個本地模塊:

  • myapp(主應用)依賴?mylib v1.0.0
  • mylib(共享庫)正在開發新版本?v1.0.1

如果直接在?myapp?中引用未發布的?mylib?代碼,Go 命令會優先遵循?myapp/go.mod?中的版本聲明(即?v1.0.0),而非本地文件系統中的代碼。這導致:

  • 修改?mylib?代碼后,myapp?無法立即使用新功能。
  • 必須先將?mylib?發布到遠程倉庫并更新版本,才能在?myapp?中引入更改。

二、go.work?如何解決問題

go.work?的核心作用是臨時覆蓋依賴解析規則,讓 Go 命令在本地開發時優先使用指定的文件路徑,而非遠程模塊。具體機制如下:

1. 工作區文件結構

go

// go.work
go 1.18use (./myapp./mylib
)replace example.com/mylib => ./mylib  // 可選:替換特定模塊路徑

2. 依賴解析優先級

當執行?go buildgo test?等命令時,Go 會按以下順序查找模塊:

  1. 工作區(go.work:優先使用?use?指令指定的本地路徑。
  2. 替換規則(replace:使用?go.work?或?go.mod?中的?replace?指令。
  3. 模塊緩存:從本地緩存或遠程倉庫下載指定版本。

3. 開發流程優化

通過?go.work,你可以:

  • 在不修改?go.mod?的情況下,同時開發多個關聯模塊。
  • 避免頻繁發布未完成的版本到遠程倉庫。
  • 保持生產環境依賴的純凈性(go.work?不影響最終構建)。

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

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

相關文章

Kimi K2萬億參數開源模型原理介紹

Kimi K2 技術全解:1T MoE 大模型如何煉成開放智能體 文章目錄Kimi K2 技術全解:1T MoE 大模型如何煉成開放智能體1. 模型架構與特點:1 T MoE 的「大」與「省」2. 主要創新點:MuonClip、Agentic RL 與工具調用2.1 MuonClip 優化器&…

【CMake】CMake構建項目入門

一、CMake介紹 CMake 是一個跨平臺的自動化構建工具,用于管理軟件項目的編譯過程。它通過簡單的配置文件(CMakeLists.txt)生成特定平臺的構建文件(如 Makefile、Visual Studio 項目),讓開發者可以專注于代…

貪心算法題解——劃分字母區間【LeetCode】

763. 劃分字母區間 本題目,“同一字母最多出現在一個片段中”,因為這句話,所以本質上 這道題目屬于合并區間 一、算法邏輯(逐步思路) ? 目標: 將字符串 s 劃分成盡可能多的片段,要求&#xf…

Python----目標檢測(使用YOLOV8網絡訓練人臉)

一、Ultralytics安裝 網址:主頁 -Ultralytics YOLO 文檔 Ultralytics提供了各種安裝方法,包括pip、conda和Docker。通過 ultralytics pip包安裝最新穩定版本的YOLOv8,或克隆Ultralytics GitHub 存儲庫以獲取最新版本。可以使用Docker在隔離的…

Filament引擎(三) ——引擎渲染流程

通過Filament引擎(二) ——引擎的調用及接口層核心對象的介紹我們知道,要在項目中使用filament,首先我們需要構建出filament的Engine的對象,然后通過filament::Engine對象實例,來構建其他對象,組裝渲染場景&#xff0c…

Oracle存儲過程導出數據到Excel:全面實現方案詳解

技術背景與需求分析 數據導出是企業級應用的核心功能,Oracle存儲過程因其高性能執行(減少網絡傳輸)、代碼復用性(封裝業務邏輯)和事務安全性(ACID保障)成為理想載體。Excel作為使用率$ \geq 95% $的辦公工具,其兼容性需求尤為突出。典型場景包括: 財務報表自動生成物…

解決el-table右下角被擋住部分

一部分展示不全&#xff0c;被遮擋&#xff0c;因為 最右邊加了fixed"right"<el-table-column fixed"right" label"操作" width"120">解決&#xff1a;1、去除fixed"right"或2、設置樣式單頁面<style lang"sc…

Waiting for server response 和 Content Download

在瀏覽器網絡調試&#xff08;如 Chrome DevTools 的 Network 面板&#xff09;中&#xff0c;Timing 選項卡下的 Waiting for server response 和 Content Download 是兩個關鍵性能指標&#xff0c;它們分別代表了 HTTP 請求生命周期的不同階段。以下是詳細解釋和優化方案&…

《Java Web程序設計》實驗報告五 Java Script學習匯報

目 錄 一、實驗目的 二、實驗環境 三、實驗步驟和內容 1、小組成員分工&#xff08;共計4人&#xff09; 2、實驗方案 3、實驗結果與分析 Ⅰ、簡述JavaScript的產生過程與Java的關系 Ⅱ、簡述JavaScript的特點有哪些 Ⅲ、簡述ECMAScript的歷史 Ⅳ、簡述ECMAScript與J…

C#與FX5U進行Socket通信

實現效果實現步驟&#xff1a;注意&#xff1a;詳細的參數這里就不說明了&#xff0c;自己網上搜即可&#xff1b;打開GX Works3 創建FX5U項目系統參數設置PLC的具體型號&#xff08;我有實物PLC&#xff09;設置IP及組態參數添加通訊設備&#xff08;這里PLC做客戶端&#xff…

ubuntu20.04基于tensorRT和c++跑yolo11

設備 系統&#xff1a;Ubuntu 20.04 顯卡&#xff1a;NVIDIA GeForce RTX 3050 顯卡驅動&#xff1a; Driver Version: 535.183.01 CUDA Version: 12.2 關鍵軟件版本總結 Cmake: 3.28.6 Cuda&#xff1a; 12.2.2 Cudnn: 8.9.7 TensorRT: 10.8.0.43 Python&#xff1a;3.10.1…

玖玖NFT數字藏品源碼(源碼下載)

玖玖NFT數字藏品源碼 這套還是很不錯的&#xff0c;前端uniapp&#xff0c;后端FastAdmin&#xff0c;對接匯元支付&#xff0c;富友支付&#xff0c;對接avata鏈&#xff0c;感興趣的自行下載研究 源碼下載&#xff1a;https://download.csdn.net/download/m0_66047725/9133…

【Redis-05】高可用方案-主從哨兵

1 概述 高可用&#xff08;High Availability&#xff09;指系統在部分節點故障時仍能持續提供服務的能力。Redis 作為核心緩存組件&#xff0c;主流的高可用方案有主從復制、哨兵模式、集群模式三種。本文介紹主從復制、哨兵模式兩種高可用方案。 2 主從復制 通過 “一主多從”…

焊接機器人智能節氣裝置

工業焊接作為現代制造業的重要組成部分&#xff0c;廣泛應用于汽車、航空航天、建筑、船舶等多個領域。隨著自動化技術的快速發展&#xff0c;焊接機器人已成為提升焊接效率和質量的關鍵裝備。在傳統焊接及部分自動化焊接過程中&#xff0c;氣體流失問題仍然普遍存在&#xff0…

【6.1.0 漫畫數據庫技術選型】

漫畫數據庫技術選型 &#x1f3af; 學習目標&#xff1a;掌握架構師核心技能——數據庫技術選型&#xff0c;針對不同業務場景選擇最合適的數據庫方案 &#x1f3db;? 第一章&#xff1a;關系型數據庫對比選型 &#x1f914; MySQL vs PostgreSQL vs TiDB 想象數據庫就像不同…

CVE-2022-4262/CVE-2022-3038

CVE-2022-4262&#xff08;Linux內核UAF漏洞&#xff09;漏洞原理CVE-2022-4262是Linux內核中RDS&#xff08;Reliable Datagram Sockets&#xff09;協議實現的一個UAF&#xff08;Use-After-Free&#xff0c;釋放后使用&#xff09;漏洞。具體來說&#xff1a;在rds_rdma_ext…

[Token]Token merging for Vision Generation

Token Compression for Vision Domain_Generation 文章目錄Image GenerationToken Merging for Fast Stable Diffusion, CVPRW 2023.Token Fusion: Bridging the Gap between Token Pruning and Token Merging, WACV 2024ToDo: Token Downsampling for Efficient Generation of…

React封裝過哪些組件-下拉選擇器和彈窗表單

背景&#xff08;S - Situation&#xff09;&#xff1a;在某活動管理系統中&#xff0c;前端頁面需要支持用戶選擇“要配置的當前活動”&#xff0c;并提供「新增」「編輯」功能&#xff0c;操作內容包括填寫活動名稱、ID、版本號等字段。原始實現邏輯分散、復用性差&#xff…

多租戶架構下的多線程處理實踐指南

在現代 SaaS 系統中&#xff0c;多租戶架構&#xff08;Multi-Tenant Architecture&#xff09;已成為主流。然而&#xff0c;隨著系統性能要求的提升和業務復雜度的增加&#xff0c;多線程成為不可避免的技術手段。但在多租戶環境下使用多線程&#xff0c;容易引發數據錯亂、租…

MyBatis插件機制揭秘:從攔截器開發到分頁插件實戰

一、攔截器體系架構解析 1.1 責任鏈模式在MyBatis中的實現 MyBatis通過動態代理技術構建攔截器鏈&#xff0c;每個插件相當于一個切面&#xff1a; // 攔截器鏈構建過程 public class InterceptorChain {private final List<Interceptor> interceptors new ArrayList<…