获取最新的Golang版本号
获取最新的Golang版本号 我知道当前的 Go 版本是 1.17.5,但 - go.dev 显示的是 1.17.4。
除了使用 git fetch 之外,还有其他获取最新 Go 版本号的解决方案吗?
4 回复
不确定这是否是您要找的,但几天前我发现了下面的项目,用它来更新我机器上的Go(从1.14.x到1.17.5)效果非常好。
GitHub - udhos/update-golang: update-golang 是一个脚本,可以轻松获取并…
update-golang 是一个脚本,可以轻松获取并安装新的 Golang 版本,同时对系统的影响最小 - GitHub - udhos/update-golang: update-golang 是一个脚本,可以轻松获取并安装新的 Gol…
是的,我正在使用与仓库中类似的脚本。
@echo off
echo This will remove existing Go binaries.
echo If you not want update, Ctrl+C or close this cmd window
echo.
pause
cd ..\tools\langs
rmdir go /s /q
For /f %%i in ('..\utils\gnuwin\curl.exe "https://go.dev/VERSION?m=text"') do echo. && echo Download %%i && set "gover=https://go.dev/dl/%%i.windows-amd64.zip"
..\utils\gnuwin\curl.exe --progress-bar -Lo go.zip %gover%
echo. && echo Extracting.. && echo.
..\utils\gnuwin\unzip.exe go.zip
del go.zip
顺便提一下,似乎 - go.dev 网站显示了正确的版本号。
可以通过Go的官方API获取最新版本信息。以下是几种可靠的方法:
方法1:使用Go官方版本API
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
type VersionInfo struct {
Version string `json:"version"`
}
func main() {
// 获取稳定版
resp, err := http.Get("https://go.dev/dl/?mode=json")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
var versions []VersionInfo
err = json.Unmarshal(body, &versions)
if err != nil {
panic(err)
}
if len(versions) > 0 {
fmt.Printf("Latest stable version: %s\n", versions[0].Version)
}
}
方法2:解析HTML页面
package main
import (
"fmt"
"net/http"
"regexp"
"strings"
)
func main() {
resp, err := http.Get("https://go.dev/dl/")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
content := string(body)
// 查找最新版本号
re := regexp.MustCompile(`go[0-9]+\.[0-9]+(\.[0-9]+)?`)
matches := re.FindAllString(content, -1)
if len(matches) > 0 {
// 移除"go"前缀
version := strings.TrimPrefix(matches[0], "go")
fmt.Printf("Latest version: %s\n", version)
}
}
方法3:使用GitHub API
package main
import (
"context"
"fmt"
"github.com/google/go-github/v42/github"
"golang.org/x/oauth2"
)
func main() {
ctx := context.Background()
client := github.NewClient(nil)
// 获取Go仓库的release
releases, _, err := client.Repositories.ListReleases(ctx, "golang", "go", nil)
if err != nil {
panic(err)
}
if len(releases) > 0 {
latestRelease := releases[0]
fmt.Printf("Latest release: %s\n", *latestRelease.TagName)
}
}
方法4:直接查询版本端点
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
resp, err := http.Get("https://go.dev/VERSION")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
version := strings.TrimSpace(string(body))
fmt.Printf("Current version: %s\n", version)
}
方法1(JSON API)是最推荐的,因为它提供了结构化的数据且最稳定。方法4直接查询VERSION端点,但需要注意缓存问题,可能需要添加Cache-Control: no-cache头。

