Golang 1.13.8和1.12.17版本已正式发布

Golang 1.13.8和1.12.17版本已正式发布 大家好,各位Gopher,

我们刚刚发布了Go的1.13.8和1.12.17版本,这是两个次要的补丁版本。

这些版本包含了对运行时、crypto/x509以及net/http包的修复。

查看发布说明以获取更多信息: https://golang.org/doc/devel/release.html#go1.13.minor

您可以从Go官网下载二进制和源代码发行版: https://golang.org/dl/

若要通过Git克隆从源代码编译,请使用以下命令更新到该版本:

git checkout go1.13.8

然后像往常一样进行构建。

感谢所有为此次发布做出贡献的人。

致意, Go团队的Alex和Carlos


更多关于Golang 1.13.8和1.12.17版本已正式发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

在从 Go 1.13.7 升级到当前版本 1.13.8 后,尝试更新 Go 工具集时遇到错误。我的 Mac 和 Windows 电脑上都出现了相同的错误。以下是来自 Mac 的错误信息:

1 tools failed to install.

gopkgs:
Error: Command failed: /usr/local/go/bin/go get -v github.com/uudashr/gopkgs/cmd/gopkgs
go: finding github.com/uudashr/gopkgs/cmd/gopkgs latest
go get: github.com/uudashr/gopkgs/cmd/gopkgs@v0.0.0-20191024034442-58e9141cd7d6 requires
    github.com/uudashr/gopkgs/v2@v2.1.0 requires
    github.com/uudashr/gopkgs@v0.0.0: reading github.com/uudashr/gopkgs/go.mod at revision v0.0.0: unknown revision v0.0.0
go: finding github.com/uudashr/gopkgs/cmd/gopkgs latest
go get: github.com/uudashr/gopkgs/cmd/gopkgs@v0.0.0-20191024034442-58e9141cd7d6 requires
    github.com/uudashr/gopkgs/v2@v2.1.0 requires
    github.com/uudashr/gopkgs@v0.0.0: reading github.com/uudashr/gopkgs/go.mod at revision v0.0.0: unknown revision v0.0.0

更多关于Golang 1.13.8和1.12.17版本已正式发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go 1.13.8和1.12.17版本主要针对运行时、crypto/x509和net/http包进行了关键修复,建议及时升级以提升应用的安全性和稳定性。以下是相关修复的示例说明:

1. crypto/x509包修复
修复了证书验证中的潜在问题,避免在某些边缘情况下错误地接受无效证书。示例代码展示了如何正确使用x509包验证证书:

package main

import (
    "crypto/x509"
    "fmt"
    "os"
)

func main() {
    certPEM := []byte(`-----BEGIN CERTIFICATE----- ... `)
    roots := x509.NewCertPool()
    ok := roots.AppendCertsFromPEM(certPEM)
    if !ok {
        panic("failed to parse root certificate")
    }
    
    // 使用修复后的验证逻辑
    opts := x509.VerifyOptions{
        Roots: roots,
    }
    if _, err := cert.Verify(opts); err != nil {
        fmt.Fprintf(os.Stderr, "Failed to verify certificate: %v", err)
    }
}

2. net/http包修复
修复了HTTP客户端在处理特定响应时可能出现的资源泄漏问题。以下示例展示了修复后的HTTP客户端使用方式:

package main

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

func main() {
    resp, err := http.Get("https://example.com")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close() // 确保响应体被关闭
    
    // 修复后能更可靠地处理响应体
    _, err = io.Copy(os.Stdout, resp.Body)
    if err != nil {
        panic(err)
    }
}

3. 运行时修复
运行时更新解决了goroutine调度和内存管理中的边缘情况,以下代码演示了修复后更稳定的并发操作:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Printf("Worker %d starting\n", id)
    // 修复后调度器能更有效地处理密集型任务
    for i := 0; i < 1e6; i++ {
        _ = i * i
    }
    fmt.Printf("Worker %d done\n", id)
}

func main() {
    var wg sync.WaitGroup
    for i := 1; i <= 5; i++ {
        wg.Add(1)
        go worker(i, &wg)
    }
    wg.Wait()
}

升级到1.13.8或1.12.17版本可确保这些修复生效。使用go version命令验证当前版本,并通过官方下载页面获取新版本二进制文件。

回到顶部