获取最新的Golang版本号

获取最新的Golang版本号 我知道当前的 Go 版本是 1.17.5,但 - go.dev 显示的是 1.17.4。

除了使用 git fetch 之外,还有其他获取最新 Go 版本号的解决方案吗?

4 回复

您可以从下载 - go.dev下载最新版本。

更多关于获取最新的Golang版本号的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不确定这是否是您要找的,但几天前我发现了下面的项目,用它来更新我机器上的Go(从1.14.x到1.17.5)效果非常好。

GitHub

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头。

回到顶部