という名前のファイルを作成し、main.go
簡単なhelloworldプログラムで試してみましょう。
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
goバージョン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
。
$ 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リリースには、Go1.8ユーザーライブラリの完全な実装が含まれる予定です。以前のリリースと同様に、Go 1.8ランタイムは完全にはマージされていませんが、Goプログラムには表示されないはずです。
長所:
- サイズを縮小
- 最適化。
短所
- スロー
- の最新バージョンは使用できません
go
。
あなたはこことここで見ることができます。