如何无需Git仓库及Git服务器发布自定义域名的Go包/模块?
无需Git服务器发布Go模块到自定义域名的方法
完全可以不用在你的域名上运行Git服务器,只通过HTTP提供元数据文件和模块归档包,就能让Go工具正常识别并拉取你的模块。核心是要符合Go模块的下载规范,以下是具体实现步骤:
1. 准备模块归档文件
- 把你的Go模块代码打包成zip格式,文件名必须遵循
module@version.zip的格式,比如my.domain.tld/something@v1.0.0.zip。版本号要符合Go的语义化版本规范,比如v1.0.0、v1.1.2-beta.1这类。 - 确保zip包解压后,根目录是
module@version的结构:比如解压my.domain.tld/something@v1.0.0.zip后,根文件夹为something@v1.0.0,所有代码文件都在这个文件夹下。
2. 提供模块元数据文件
你需要在域名下提供几个关键的元数据文件,路径和内容要严格匹配规范:
go.mod文件
在https://my.domain.tld/something/go.mod路径下放你的模块的go.mod文件,内容和本地模块的go.mod一致,示例:
module my.domain.tld/something go 1.21
版本列表文件
在https://my.domain.tld/something/@v/list路径下,每行写一个已发布的版本号,示例:
v1.0.0 v1.0.1
版本详情文件
针对每个版本,提供https://my.domain.tld/something/@v/{version}.info文件,内容为JSON格式,包含版本的基础信息,示例:
{ "Version": "v1.0.0", "Time": "2024-05-20T12:00:00Z" }
版本归档文件路径
把之前打包好的zip文件放在https://my.domain.tld/something/@v/{version}.zip路径下,比如https://my.domain.tld/something/@v/v1.0.0.zip。
3. 配置Go工具拉取模块
用户使用你的模块时,需要让Go工具能正确找到源:
- 在项目的
go.mod中直接引入模块:require my.domain.tld/something v1.0.0 - 如果你的域名没有配置默认的模块代理,用户需要设置
GOPROXY环境变量,把你的域名加入,示例:
也可以在项目的export GOPROXY=https://my.domain.tld,https://proxy.golang.org,directgo.env文件中配置该变量。
注意事项
- 所有HTTP请求要返回正确的Content-Type:zip文件返回
application/zip,JSON文件返回application/json,文本文件返回text/plain。 - 路径和命名必须严格符合Go模块规范,否则Go工具会无法识别。
- 如果用HTTPS,要确保证书有效;如果用HTTP,需要用户设置
GOSUMDB=off或者在GOPRIVATE中添加你的域名。
内容的提问来源于stack exchange,提问作者hasen
相关产品推荐
相关产品推荐

