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
在从 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命令验证当前版本,并通过官方下载页面获取新版本二进制文件。

