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
更多关于Golang调用GitHub API时遇到的仓库问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
第二个URL返回一个包含发布URL字段的JSON,查询该URL会得到一个空列表。同样,通过网站查看,该项目没有关联的发布版本,看来你需要查看并解析标签。你可以找到一个列出这些标签的URL,就像我找到发布URL那样。
在调用GitHub API时遇到golang/go仓库的问题,通常是因为GitHub对该仓库有特殊处理。你可以尝试以下方法:
-
使用GitHub的官方Go模块代理: Go团队推荐使用
proxy.golang.org来获取版本信息,而不是直接调用GitHub API。 -
替代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) } } -
使用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]) } } -
直接下载页面解析: 如果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版本信息。

