Golang 1.12.3 和 1.11.8 版本正式发布
Golang 1.12.3 和 1.11.8 版本正式发布 大家好,
我们刚刚发布了 Go 1.12.3 和 1.11.8 版本,这是两个小版本更新。
这些版本修复了在旧版 GNU/Linux 系统上使用预编译二进制发行版时,导致使用 cgo 的程序链接失败的问题。
只有遇到此问题的 Linux 用户需要更新。
查看发布说明以获取更多信息:
https://golang.org/doc/devel/release.html#go1.12.minor
您可以从 Go 网站下载二进制和源代码发行版:
要通过 Git 克隆从源代码编译,请使用以下命令更新到该版本:
git checkout go1.12.3
并照常构建。
致意,
Go 团队 Andy
更多关于Golang 1.12.3 和 1.11.8 版本正式发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang 1.12.3 和 1.11.8 版本正式发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go 1.12.3 和 1.11.8 的发布主要解决了在旧版 GNU/Linux 系统上使用预编译二进制发行版时,cgo 程序链接失败的问题。这个问题源于 glibc 版本兼容性,具体表现为动态链接器无法解析某些符号。以下是一个示例,展示在修复前可能出现的错误场景:
假设在旧版 Linux 系统(如使用 glibc 2.17)上运行一个使用 cgo 的 Go 程序,编译时可能遇到类似错误:
// 示例代码:main.go
package main
/*
#include <stdio.h>
void hello() {
printf("Hello from C!\n");
}
*/
import "C"
func main() {
C.hello()
}
在 Go 1.12.2 或更早版本中,使用预编译二进制发行版编译此代码时,可能会报错:
/usr/bin/ld: cannot find -lc
或类似链接器错误,因为预编译二进制与系统 glibc 不兼容。
现在,在 Go 1.12.3 或 1.11.8 中,这个问题已修复。您可以直接下载新版本并重新编译:
# 下载并安装 Go 1.12.3
wget https://golang.org/dl/go1.12.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.12.3.linux-amd64.tar.gz
export PATH=/usr/local/go/bin:$PATH
# 编译示例程序
go build main.go
./main
输出应为:
Hello from C!
这表明 cgo 链接成功。如果您之前遇到此问题,更新到这些版本即可解决。对于未受影响的用户,无需立即升级。

