删除GitHub上的Go Module仓库后仍能使用该模块的原因是什么?
为什么已删除的GitHub Go模块仍能在Go Playground中正常使用?
问题场景
我在学习Go Modules时,创建了一个包含Add()函数的基础模块并发布至GitHub,仓库地址已删除(访问返回404)。但我仍能通过如下代码使用该模块的calc包:
package main import ( "fmt" "github.com/umermasood/nummanip/calc" ) func main() { fmt.Println(calc.Add(1, 2)) }
运行输出为:
3
原因分析
- Go Playground的本地缓存机制:Go Playground会将首次加载的模块代码缓存到自身服务器中。当你的模块第一次被Playground处理时,它已经把
nummanip模块的完整代码保存到了缓存里,即便原GitHub仓库被删除,Playground依然可以调用本地缓存的内容完成编译和运行。 - 模块依赖的缓存优先策略:Go在处理模块依赖时,会优先使用本地已缓存的版本,而非每次都从远程仓库拉取。你的代码中没有指定模块的具体版本,Playground会直接使用之前缓存的初始版本模块代码。
- 缓存未触发更新/过期:Playground的缓存不会因为原仓库删除而立即清除,只有当缓存达到过期时间、或者有明确的版本更新请求时,才会尝试重新拉取远程模块。你的场景中缓存尚未失效,因此仍能正常运行代码。
内容的提问来源于stack exchange,提问作者M Umer Masood
相关产品推荐
相关产品推荐

