Golang 1.13.4 和 1.12.13 版本已发布
Golang 1.13.4 和 1.12.13 版本已发布 大家好,
万圣节快乐!🎃
我们刚刚发布了 Go 1.13.4 和 1.12.13 版本,这是两个次要的补丁版本。
Go 1.13.4 包含了对 net/http 和 syscall 包的修复。
这两个版本都解决了 macOS 10.15 Catalina 上的一个问题,即未经过公证的安装程序和二进制文件曾被 Gatekeeper 拒绝。
查看发布说明以获取更多信息: https://golang.org/doc/devel/release.html#go1.13.minor
您可以从 Go 网站下载二进制和源代码发行版: https://golang.org/dl/
要使用 Git 克隆从源代码编译,请使用以下命令更新到该版本:
git checkout go1.13.4
然后照常构建。
感谢所有为此次发布做出贡献的人。
祝好, Go 团队 Andy
更多关于Golang 1.13.4 和 1.12.13 版本已发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang 1.13.4 和 1.12.13 版本已发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go 1.13.4 和 1.12.13 的发布主要解决了 macOS Catalina 上的 Gatekeeper 公证问题,这对于在 macOS 10.15 上部署 Go 应用的开发者来说至关重要。以下是相关修复的简要说明和示例。
1. macOS Gatekeeper 修复 在 macOS 10.15 中,未公证的二进制文件会被 Gatekeeper 阻止运行。此版本更新了链接器和构建流程,确保生成的二进制文件符合公证要求。如果你在 Catalina 上构建或分发 Go 程序,升级到此版本可以避免运行时被系统拦截。
2. net/http 包修复
Go 1.13.4 修复了 net/http 包中的一个问题,涉及 HTTP 客户端在处理特定响应时可能出现的错误。例如,修复了在某些情况下读取响应体时可能发生的死锁或数据损坏。以下是一个简单的 HTTP 客户端示例,展示修复后包的正常使用:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://example.com")
if err != nil {
fmt.Printf("请求失败: %v\n", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("读取响应失败: %v\n", err)
return
}
fmt.Printf("响应内容: %s\n", body)
}
此代码在修复后能更稳定地处理网络响应。
3. syscall 包修复
修复了 syscall 包中与系统调用相关的问题,提升了在类 Unix 系统上的兼容性。例如,修复了某些情况下文件描述符处理不当导致的资源泄漏。以下示例展示如何使用 syscall 进行文件操作(注意:实际使用中应优先使用 os 包):
package main
import (
"fmt"
"syscall"
)
func main() {
fd, err := syscall.Open("test.txt", syscall.O_RDONLY, 0)
if err != nil {
fmt.Printf("打开文件失败: %v\n", err)
return
}
defer syscall.Close(fd)
var buf [128]byte
n, err := syscall.Read(fd, buf[:])
if err != nil {
fmt.Printf("读取文件失败: %v\n", err)
return
}
fmt.Printf("读取内容: %s\n", buf[:n])
}
修复后,系统调用更可靠,减少了潜在错误。
升级建议
如果你在 macOS Catalina 上开发或部署,建议立即升级到 Go 1.13.4 或 1.12.13 以避免 Gatekeeper 问题。对于其他用户,升级可以获取最新的安全修复和稳定性改进。使用 git checkout go1.13.4 更新源代码并重新构建即可。

