对比一下go语言和c语言编译hello world后的大小,go语言版本有2M大小,而C语言版本仅有8k:
go 代码:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
c代码:
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
大小对比:
# du * -sh
8.0K a.out
2.2M hello
4.0K hello.c
4.0K hello.go
谢谢邀请,有几个问题
1) c版的main后面要返回0,否则编译时会有warning。
2) go版的hello world默认编译出来的a.out是有符号表的,你如果想要去掉符号表,需要
strip -s main
在RHEL6.4上,go1.4 strip -s之后,go版本的hello world只有1.3MB
3) go当时希望解决目前语言的一个问题就是部署时的库依赖,能够迅速的、无缝的部署,试想,如果有一个服务器程序要发布,这个服务器程序依赖于差不多100多个依赖的动态库,每次你加入新的feature之后,依赖的动态库要升级,服务器程序本身也要升级,这在部署的时候是非常麻烦的,所以go推崇的程序发布方式是将依赖的库和程序本身一起发布,也就是说你用go编译出来的程序,不会再依赖其他的库了,你直接拷贝过去就能用!是的,直接拷贝就能用!! java程序要发布,你需要打包JRE环境,python程序要发布,你需要打包python解释器,而go不用。所以去掉符号表的go版的hello world差不多1.3MB,这个在目前硬盘白菜价的市场上,基本上都能接受。(go编译选项https://golang.org/cmd/link/)
4) C版的hello world我们来看下,都依赖什么。
其中光libc的依赖库就差不多2MB了。
所以从依赖库的角度来看,go版的hello world表现尚可,还在接受范围之内。
希望上述回答能解决你的问题。