golang 1.7 がもうすぐ出そうですね!!

Due to changes across the compiler toolchain and standard library, binaries built with this release should typically be smaller than binaries built with Go 1.6, sometimes by as much as 20-30%.

コンパイラ ツール チェイン、標準ライブラリが変更されたのため、このリリースでビルドされたバイナリは 20-30% で時々 行く 1.6 ビルドされたバイナリより小さい通常はずです。
by http://www.bing.com/translator

と会ったので、よし検証してやろうじゃないか。さくっと簡単に

環境

今回のビルド環境は docker hubに存在する golang のalpineイメージを利用しています。 また、今回は linuxdarwin のみでどちらも amd64 だけで検証しています。

検証対象

最近開発しているバックアップツール shinofara/stand を使って検証します。 terraformとかdockerみたいな大きいもので検証してみても良かったかもしれないけど、とりあえず

結果

ON ALPINE IMAGE

OS ARCH GO VERSION TIME IMAGE SIZE
linux amd64 go1.5.4 9.45s 7.8M
linux amd64 go1.6.1 10.12s 8.5M
linux amd64 go1.7rc1 5.60s 4.9M
OS ARCH GO VERSION TIME IMAGE SIZE
darwin amd64 go1.5.4 22.30s 8.5M
darwin amd64 go1.6.1 20.39s 9.3M
darwin amd64 go1.7rc1 15.39s 5.4M

ON MAC

一応mac上で、go1.6.1 だけ計測した

OS ARCH GO VERSION TIME IMAGE SIZE
linux amd64 go1.6.1 18.25s 8.5M
darwin amd64 go1.6.1 6.09s 9.2M

所感

  • クロスコンパイルには2倍以上の時間がかかるが、速度は早くなっている
  • ビルド環境が変わってもさほど結果のサイズには影響は無い
  • go1.7rc1go1.6 よりビルド速度が2倍近く早く、サイズも3,4割減している
  • 軽くなってくれればその分配布が楽になるから良い

実行メモ

on alpine

go version go1.5.4 linux/amd64                                                  
darwin amd64\n                                                                  
real    0m 22.30s                                                               
user    0m 30.83s                                                               
sys     0m 3.24s                                                              
-rwxr-xr-x    1 root     root        8.5M Jul 13 17:35 ../../stand_darwin_amd64 
go version go1.5.4 linux/amd64                                                  
linux amd64\n                                                                   
real    0m 9.45s                                                                
user    0m 10.29s                                                               
sys     0m 1.20s                                                                
-rwxr-xr-x    1 root     root        7.8M Jul 13 17:35 ../../stand_linux_amd64  
go version go1.6.1 linux/amd64                                                  
darwin amd64\n                                                                  
real    0m 20.39s                                                               
user    0m 28.29s                                                               
sys     0m 1.63s                                                                
-rwxr-xr-x    1 root     root        9.3M Jul 13 17:36 ../../stand_darwin_amd64 
go version go1.6.1 linux/amd64                                                  
linux amd64\n                                                                   
real    0m 10.12s                                                               
user    0m 9.01s                                                                
sys     0m 1.13s                                                                
-rwxr-xr-x    1 root     root        8.5M Jul 13 17:36 ../../stand_linux_amd64  
go version go1.7rc1 linux/amd64                                                 
darwin amd64\n                                                                  
real    0m 15.39s                                                               
user    0m 19.51s                                                               
sys     0m 1.64s                                                                
-rwxr-xr-x    1 root     root        5.4M Jul 13 17:36 ../../stand_darwin_amd64 
go version go1.7rc1 linux/amd64                                                 
linux amd64\n                                                                   
real    0m 5.60s                                                                
user    0m 4.85s                                                                
sys     0m 0.63s                                                                
-rwxr-xr-x    1 root     root        4.9M Jul 13 17:36 ../../stand_linux_amd64  

on mac

darwin amd64 
6.09 real         9.63 user         1.89 sys
-rwxr-xr-x  1 shinofara  staff   9.2M  7 14 03:03 ../../stand_darwin_amd64 
linux amd64
18.25 real        31.38 user         5.73 sys
-rwxr-xr-x  1 shinoafara  staff   8.5M  7 14 03:03 ../../stand_linux_amd64

リアクション切に願います(´;ω;`)ブワッ

今回検証対象にした shinofara/stand ですが、一人で開発している為 色々妥協が生まれたり悩んだりしている事が多くあります。 せめて、Starを頂く事ができれば、ウェーイ!と単純にテンションを上げて頑張る事が出来るかもしれません。

まずは自分で欲しいものを作ったので、他にも誰かの役に立てればそれはそれで嬉しいです。 以上、検証にお付き合いありがとうございました。

最後に

Gopher conたのしそうだったなぁ。。。