goを1.5にアップデートして1.4とベンチを取る

# コンパイル

[ダウンロードページ](https://golang.org/dl/)から[src](https://storage.googleapis.com/golang/go1.5.src.tar.gz)を適当なディレクトリに落として解凍します。

```shell-session
[root@hogehoge ~]# cd /tmp                                                                                                                                                                                                          
[root@hogehoge tmp]# wget https://storage.googleapis.com/golang/go1.5.src.tar.gz                                                                                                                                                    
--2015-08-20 19:28:01--  https://storage.googleapis.com/golang/go1.5.src.tar.gz                                                                                                                                                             
Resolving storage.googleapis.com... 216.58.221.16, 2404:6800:4004:815::2010                                                                                                                                                                 
Connecting to storage.googleapis.com|216.58.221.16|:443... connected.                                                                                                                                                                       
HTTP request sent, awaiting response... 200 OK                                                                                                                                                                                              
Length: 12045689 (11M) [application/octet-stream]                                                                                                                                                                                           
Saving to: “go1.5.src.tar.gz”                                                                                                                                                                                                               
                                                                                                                                                                                                                                            
100%[=====================>] 12,045,689  10.2M/s   in 1.1s   
                                                                                                                                                                                                                                            
2015-08-20 19:28:02 (10.2 MB/s) - “go1.5.src.tar.gz” saved [12045689/12045689]   
[root@hogehoge tmp]# tar xzf go1.5.src.tar.gz                                                                                                                                                                                                                                                                                                                                                                                         
```

srcに入って./all.bash実行

```shell-session
[root@hogehoge tmp]# cd go/src/
[root@hogehoge src]# ./all.bash
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /root/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
./make.bash: line 121: /root/go1.4/bin/go: No such file or directory
```

`/root/go1.4/bin/go`にgo 1.4が無いと怒られたので、`GOROOT`から`/root/go1.4`へコピー

```shell-session
[root@hogehoge src]# cp -r /usr/local/go /root/go1.4
```

再度実行

```shell-session
[root@hogehoge src]# ./all.bash
##### Building Go bootstrap tool.
cmd/dist

##### Building Go toolchain using /root/go1.4.
bootstrap/internal/obj
bootstrap/internal/obj/arm
bootstrap/internal/obj/arm64
bootstrap/internal/obj/ppc64
--- 省略 ---
##### API check
Go version is "go1.5", ignoring -next /tmp/go/api/next.txt

ALL TESTS PASSED

---
Installed Go for linux/amd64 in /tmp/go
Installed commands in /tmp/go/bin
*** You need to add /tmp/go/bin to your PATH.
```

特に問題がなければ数分でビルドが終わります。


`GOROOT`を上書き

```shell-session
[root@hogehoge src]# mv /usr/local/go /usr/local/go1.4
[root@hogehoge src]# cp -r /tmp/go /usr/local/
```

バージョンを確認

```shell-session
[root@hogehoge src]# go version
go version go1.5 linux/amd64
```
1.5になってます。

# ベンチマーク

`go1.5`は[gcロジックが見直された](https://golang.org/doc/go1.5#gc)、メモリをさらに効率的に使うようになったなど、より速く省メモリになったと言われています。
ので、`go1.4`で作った稼働中のプログラムでベンチを取ってみます。

```shell-session:go1.4の時のbench
[root@hogehoge project]# go test src/main/main.go src/main/main_test.go -bench=Bench
PASS
BenchmarkMain           20000             67906 ns/op            7730 B/op         61 allocs/op
ok      command-line-arguments  1.563s
```

```shell-session:go1.5の時のbench
[root@hogehoge project]# go test src/main/main.go src/main/main_test.go -bench=Bench
PASS
BenchmarkMain           30000             58165 ns/op            7189 B/op         56 allocs/op
ok      command-line-arguments  2.571s
```

プログラムの中身については詳しくは書けませんが、`1.4`に比べて`1.5`は2割ほどメモリの使用量が減り、処理速度も向上するという結果になりました。
バージョンを上げるだけで2割も性能が上がるのは大変喜ばしいですね。

あとはメモリリークのチェック、負荷試験を経て問題なければ本番投入しても良いかと思います。