Golang调用GitHub API时遇到的仓库问题

Golang调用GitHub API时遇到的仓库问题 大家好!

首先,感谢你们的项目!😊

我正在编写一个小脚本来自动安装 GoLang,但在使用 GOLang/go 仓库的 API 时遇到了问题。 https://api.github.com/repos/golang/go/releases/latest --> 没有返回 https://api.github.com/repos/golang/go -> 显示 API 但无法获取最新发布版本。

有没有其他方法可以获取 API 的最新发布版本?

PS:我可以获取其他用户/仓库(非 GoLang 用户)的最新发布版本。😞

谢谢


更多关于Golang调用GitHub API时遇到的仓库问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

NobbZ:

n

谢谢,我会继续寻找那种方法!

这是脚本链接: https://github.com/hellresistor/EasyGo/blob/master/easygo.sh

更多关于Golang调用GitHub API时遇到的仓库问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


第二个URL返回一个包含发布URL字段的JSON,查询该URL会得到一个空列表。同样,通过网站查看,该项目没有关联的发布版本,看来你需要查看并解析标签。你可以找到一个列出这些标签的URL,就像我找到发布URL那样。

在调用GitHub API时遇到golang/go仓库的问题,通常是因为GitHub对该仓库有特殊处理。你可以尝试以下方法:

  1. 使用GitHub的官方Go模块代理: Go团队推荐使用proxy.golang.org来获取版本信息,而不是直接调用GitHub API。

  2. 替代API端点: 尝试使用tags端点来获取最新版本:

    package main
    
    import (
        "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
    )
    
    type Tag struct {
        Name string `json:"name"`
    }
    
    func main() {
        url := "https://api.github.com/repos/golang/go/tags"
        resp, err := http.Get(url)
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
    
        body, _ := ioutil.ReadAll(resp.Body)
        
        var tags []Tag
        json.Unmarshal(body, &tags)
        
        if len(tags) > 0 {
            fmt.Printf("Latest tag: %s\n", tags[0].Name)
        }
    }
    
  3. 使用go命令获取版本

    package main
    
    import (
        "fmt"
        "os/exec"
        "strings"
    )
    
    func main() {
        cmd := exec.Command("go", "list", "-m", "-versions", "golang.org/x/tools")
        output, err := cmd.Output()
        if err != nil {
            panic(err)
        }
        
        versions := strings.Fields(string(output))
        if len(versions) > 1 {
            fmt.Printf("Latest version: %s\n", versions[len(versions)-1])
        }
    }
    
  4. 直接下载页面解析: 如果API限制仍然存在,可以解析Go官方下载页面:

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
        "regexp"
    )
    
    func main() {
        resp, err := http.Get("https://golang.org/dl/")
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
    
        body, _ := ioutil.ReadAll(resp.Body)
        
        re := regexp.MustCompile(`go[0-9]+\.[0-9]+\.[0-9]+`)
        matches := re.FindAllString(string(body), -1)
        
        if len(matches) > 0 {
            fmt.Printf("Latest version: %s\n", matches[0])
        }
    }
    

这些方法可以绕过GitHub API对golang/go仓库的限制,成功获取到最新的Go版本信息。

回到顶部