创建一个名为的文件main.go
,让我们尝试使用简单的hello world程序。
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
我使用1.9.1版
$ go version
go version go1.9.1 linux/amd64
用标准go build
命令编译。
$ go build main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.8M Oct 27 07:47 main
让我们再次使用编译,go build
但ldflags
如上所述
$ go build -ldflags "-s -w" main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.2M Oct 27 08:15 main
文件大小减少了30%。
现在,让我们使用gccgo
,
$ go version
go version go1.8.1 gccgo (GCC) 7.2.0 linux/amd64
建筑一起去gccgo
,
$ go build main.go
$ ls -lh
-rwxr-xr-x 1 nil nil 34K Oct 27 12:18 main
二进制大小减少了近100%。让我们再一次尝试main.go
使用gccgo
with和build标志来构建,
$ go build -gccgoflags "-s -w" main.go
-rwxr-xr-x 1 nil nil 23K Oct 27 13:02 main
警告:
由于gccgo
二进制文件是动态链接的。如果二进制文件的大小很大,则使用gccgo编译时,二进制文件不会减少100%,但是大小会减少很多。
与gc相比,gccgo编译代码的速度较慢,但支持更强大的优化,因此gccgo构建的受CPU约束的程序通常运行速度更快。多年来,在GCC中实现的所有优化都是可用的,包括内联,循环优化,向量化,指令调度等。尽管它并不总是能产生更好的代码,但在某些情况下,使用gccgo编译的程序可以运行30%更快。
预计GCC 7版本将包含Go 1.8用户库的完整实现。与早期版本一样,Go 1.8运行时没有完全合并,但是Go程序应该看不到它。
优点:
- 缩小尺寸
- 优化。
缺点
- 慢
- 无法使用的最新版本
go
。
您可以在这里和这里看到。