本文永久链接– https://tonybai.com/2024/11/11/some-details-about-go-compilation在Go开发中,编译相关的问题看似简单,但实则蕴含许多细节。有时,即使是Go专家也需要停下来,花时间思考答案或亲自验证。本文将通过几个具体问题,和大家一起探讨Go编译过程中的一些你可能之前未曾关注的细节。注:本文示例使用的环境为Go 1.23.0、Linux Kernel 3.10.0和CentOS 7.9。1. Go编译默认采用静态链接还是动态链接?我们来看第一个问题:Go编译默认采用静态链接还是动态链接呢?很多人脱口而出:动态链接,因为CGO_ENABLED默认值为1,即开启Cgo。也有些人会说:“其实Go编译器默认是静态链接的,只有在使用C语言库时才会动态链接”。那么到底哪个是正确的呢?我们来看一个具体的示例。但在这之前,我们要承认一个事实,那就是CGO_ENABLED默认值为1,你可以通过下面命令来验证这一点:$go env|grep CGO_ENABLED
CGO_ENABLED='1'验证Go默认究竟是哪种链接,我们写一个hello, world的Go程序即可:// go-compilation/main.go
package main
import "fmt"
func main() {
fmt.Pri
...
继续阅读
(22)