让我们比较一下c和go: Hello_world.c:
#include<stdio.h>
int main(){
printf("Hello world!");
}
Hello_world.go:
package main
import "fmt"
func main(){
fmt.Printf("Hello world!")
}
编译这两个:
$gcc Hello_world.c -o Hello_c
$8g Hello_world.go -o Hello_go.8
$8l Hello_go.8 -o Hello_go
还有..。那是什么?
$ls -ls
... 5,4K 2010-10-05 11:09 Hello_c
... 991K 2010-10-05 11:17 Hello_go
大约1Mb的Hello world。你在开我的玩笑吗?我做错了什么?
(仅限剥离Hello_go -> 893K )
发布于 2010-10-05 15:36:54
注意:此答案已过时
请注意,此答案已过时。请参考其他票数较高的答案。我想删除这篇文章,但不能删除接受的答案。
文件太大了是不是有问题?我不知道Go,但我会假设它静态地链接了一些运行时库,而C程序不是这样的。但是一旦你的程序变得更大,这可能就没什么好担心的了。
正如here所描述的,静态链接Go运行时是默认的。该页面还告诉您如何设置动态链接。
发布于 2014-01-15 19:04:27
如果您使用的是基于Unix的系统(例如,Linux或Mac ),您可以尝试通过使用-w标志构建可执行文件来删除包含在可执行文件中的调试信息:
go build -ldflags "-w" prog.go
文件大小显著减小。
有关更多详细信息,请访问地理数据库的页面:http://golang.org/doc/gdb
发布于 2016-05-27 02:50:54
2016年的答案:
使用go build -ldflags "-s -w"
编译
➜ ls -lh hello
-rwxr-xr-x 1 oneofone oneofone 976K May 26 20:49 hello*
upx
,从1.6开始不再需要goupx
。➜ ls -lh hello
-rwxr-xr-x 1 oneofone oneofone 367K May 26 20:49 hello*
https://stackoverflow.com/questions/3861634
复制相似问题