go语言安装包详细讲解

go语言安装的包在哪个地方

我们在安装热更新的时候,会使用这个命令

bash 复制代码
go install github.com/gravityblast/fresh@latest

安装了github.com/gin-gonic/gin这个包,这个包的内容是在哪里呢?

前端安装的vue,vuex,axios包,在node_modules中

那么 github.com/gin-gonic/gin是在哪里?

和前端 node_modules 的核心区别

以下是图片内容转换成的 Markdown 表格:

前端 npm Go modules
存放位置 每个项目目录下一份 node_modules 所有项目全局共享一份,在模块缓存里
具体路径 项目/node_modules/vue GOMODCACHE/github.com/gin-gonic/gin@v1.12.0
版本区分 嵌套目录里塞不同版本 目录名上带版本号: gin@v1.12.0
依赖清单 package.json go.mod
能否修改 能(但不推荐) 只读,文件系统层面就是只读的

go中的包全局共享,不重复下载

假设你以后建 10 个 Gin 项目,npm 会在每个项目里各装一份 vue(10 份副本)

Go 只在C:\Users\code3\go\pkg\mod 里存一份gin@v1.12.0 ,10 个项目共用。

不同版本才会各存一份,比如同时存在gin@v1.10.0 和gin@v1.12.0 两个目录。

项目里靠 go.mod 记录"用哪个版本"

你的项目目录下没有包的副本,

只有 go.mod 里一行require github.com/gin-gonic/gin v1.12.0 声明依赖和版本,

编译时 Go 自动去全局缓存里找对应版本。

A项目安装的包packageA,B项目使用到相同的包,还需要再次安装packageA吗?

需要"声明",但不需要重新"下载" 。这是 Go 和 npm 的关键区别:

新项目里你不能直接 import,必须先让项目"认识"这个包。两种方式任选:

方式一:手动声明

csharp 复制代码
go mod init myproject  初始化一个项目
go get github.com/gin-gonic/gin 最重要的就是这一个

方式 2 :先写代码 import ,再自动补依赖(更常用)

go 复制代码
go mod init myproject  
在 main. go 文件中 import "github.com/gin-gonic/gin"   
go mod tidy

go mod tidy 会扫描你代码里所有 import,自动把依赖写进 go.mod 并下载缺失的包

为什么说不需要重新下载?

上次已经下载过gin@v1.12.0 到全局缓存C:\Users\code3\go\pkg\mod ,它在磁盘上一直存在。

go get 包名 或者 go mod tidy

  • Go 发现本地缓存里已有 v1.12.0 → 直接复用,0 网络下载 ,瞬间完成
  • 如果缓存没有(比如你换电脑了、或指定了别的版本)→ 才从网上下载

总结

总结 :每次新项目都要走一遍go mod init + 声明依赖的流程,

但只要版本相同且本机缓存还在,就不会再消耗流量重新下载。

相关推荐
金銀銅鐵5 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
FungLeo6 小时前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
用户360055579006 小时前
Kestrel_VLLM - 34 · 批量 M 行:五个块、两种层型,与「退回去」的两个原语
后端
leo在掘金7 小时前
25.5k Star 的 DeepInfer 怎么扛住3万亿参数
后端·架构
Agent世界7 小时前
cookie 判据会撒谎:CDP 登录态保活的五个实测坑
后端·自动化运维
林小帅7 小时前
【笔记】Prisma v7 + SQLite TS2305 及连锁 TS7006 问题
前端·javascript·后端
王中阳Go7 小时前
你那条三跳链路的单跳超时,是按压测的 p95 定的,还是拍出来的?
人工智能·后端·架构
时光不老杰7 小时前
03 Netty 双通道长连接层
后端
136096757237 小时前
报错指的地方,往往不是坏的地方:47 次故障的定位方法
后端
Gopher_HBo7 小时前
cpuprof.go开关、缓冲区与记账
后端