Golang下载包的URL是什么?

Golang下载包的URL是什么? 你好,

我们可以通过 https://rubygems.org/downloads/{name}-{version}.gem 下载 gem 包,通过 https://crates.io/api/v1/crates/{name}/{version}/download 下载 cargo 包。我们可以直接通过这些 URL 下载软件包。

如果我们没有版本号,是否有任何 URL 可以直接下载 Go 包?

4 回复

我认为你是对的,但 go get github.com/sirupsen/logrus 不知为何能够检测到最新版本,下载并安装它。github.com/sirupsen/logrus 是如何做到这一点的?

更多关于Golang下载包的URL是什么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


如果你知道Go包的版本,那么你可以使用以下URL格式以zip格式下载它。

https://proxy.golang.org/{path-to-module}/@v/{version}.zip 例如:https://proxy.golang.org/github.com/sirupsen/logrus/@v/v1.6.0.zip

据我所知,如果不指定版本号是无法下载的。但是你可以获取可用版本的列表。

https://proxy.golang.org/github.com/sirupsen/logrus/@v/list

你也可以像这样获取最新版本。

https://proxy.golang.org/github.com/sirupsen/logrus/@latest

如果你想了解更多关于proxy.golang.org的信息,请在终端中输入以下命令。

$ go help goproxy

@rpotter12 嗯,你当时问的是URL,根据给出的例子,我给出了答案。微笑

以下是 go help module-get 中的文档:

对于每个指定的包或包模式,get 必须决定使用相应模块的哪个版本。默认情况下,get 会查找最新的带标签的发布版本,例如 v0.4.5 或 v1.2.3。如果没有带标签的发布版本,get 会查找最新的带标签的预发布版本,例如 v0.0.1-pre1。如果根本没有任何带标签的版本,get 会查找最新的已知提交。如果模块尚未被要求使用一个更新的版本(例如,一个比最新发布版本更新的预发布版本),get 将使用它查找到的版本。否则,get 将使用当前要求的版本。

go get 找不到任何标签来确定版本时,它会使用最新的提交作为最新版本。在这种情况下,go get 使用的版本是 v0.0.0-{提交时间}-{提交ID}(对此我不是100%确定,但它确实使用了提交时间和ID,这一点是肯定的)。

在 Go 中,没有直接通过固定 URL 格式下载包的官方方式。Go 使用版本控制系统(如 Git、Mercurial 等)来管理包,而不是通过静态 URL 下载压缩包。不过,你可以使用 go get 命令来下载包,它会从模块代理或版本控制仓库获取代码。

如果你需要直接下载包的源代码(例如通过 HTTP),可以使用 Go 模块代理。默认代理是 proxy.golang.org,你可以通过以下 URL 格式访问包:

https://proxy.golang.org/{module-path}/@v/{version}.zip

例如,下载 github.com/gin-gonic/gin 模块的 v1.9.1 版本:

# 使用 curl 下载
curl -L https://proxy.golang.org/github.com/gin-gonic/gin/@v/v1.9.1.zip -o gin.zip

如果没有版本号,你可以获取最新版本。模块代理会重定向到最新版本,但你需要先知道最新版本号。可以通过以下方式获取最新版本信息:

# 获取最新版本列表
curl https://proxy.golang.org/github.com/gin-gonic/gin/@v/list

# 获取最新版本信息(JSON 格式)
curl https://proxy.golang.org/github.com/gin-gonic/gin/@latest

示例代码:使用 Go 的 net/http 包下载模块:

package main

import (
    "io"
    "net/http"
    "os"
)

func main() {
    // 下载指定版本的模块
    url := "https://proxy.golang.org/github.com/gin-gonic/gin/@v/v1.9.1.zip"
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    // 保存为本地文件
    out, err := os.Create("gin.zip")
    if err != nil {
        panic(err)
    }
    defer out.Close()

    _, err = io.Copy(out, resp.Body)
    if err != nil {
        panic(err)
    }
}

注意:如果你在中国大陆,可能需要配置 GOPROXY 为国内镜像(如 https://goproxy.cn),但模块代理 URL 格式相同。例如:

https://goproxy.cn/github.com/gin-gonic/gin/@v/v1.9.1.zip

总之,Go 包通常通过版本控制系统管理,直接下载推荐使用模块代理的固定 URL 格式,但需要版本号。如果没有版本号,需先获取最新版本信息。

回到顶部