良かったGolangの記事/発表（2016年）

（元々Gistにメモ的に[書いていた](https://gist.github.com/tcnksm/b45707070a1d02b3c9435a8d15f80b57)が後から追跡しにくいので転載した）

golangweekly.com が http://golangweekly.com/issues/140 にてBest 2016をまとめていた．便乗して自分なりに今年良かったものをまとめてみる．https://blog.golang.org/ は除外している．あくまで「自分が良かった」ものである．

まず[go-kit](https://github.com/go-kit/kit)のPeter Bourgonの[Go best practices, six years in](https://peter.bourgon.org/go-best-practices-2016/)とBoltDBのBen Johnsonが標準パッケージを詳細に語るGo Walkthroughシリーズ https://medium.com/go-walkthrough はMUSTである．これらの知見を知ってるだけでだいぶ良いコードが書けるのではないか．

今年はGo1.6とGo1.7がリリースされたがruntimeの変更で大きかったのがGCの改善とSSAの導入だった．これらに関しては以下が面白かった．

- GC
    - [Go’s march to low-latency GC](https://blog.twitch.tv/gos-march-to-low-latency-gc-a6fa96f06eb7#.wnfm24r9l)
    - [Golang’s Real-time GC in Theory and Practice](https://blog.pusher.com/golangs-real-time-gc-in-theory-and-practice/)
- SSA
    - [Go1.7からSSAが導入された - flyhigh](http://shinpei.github.io/blog/2016/08/13/what-ssa-brings-to-go-17/)
    - [Looking at your program’s structure in Go 1.7](https://pauladamsmith.com/blog/2016/08/go-1.7-ssa.html)

Go1.7では`context`パッケージが新たに標準パッケージに追加された．今後Gopherがこれを使いこなすのは必須である．以下がわかりやすい．

- [context パッケージの紹介](http://go-talks.appspot.com/github.com/matope/talks/2016/context/context.slide#1)
- http://peter.bourgon.org/blog/2016/07/11/context.html (Valueをいかに使うべきか)

来年頭にリリース予定のGo1.8については以下をチェックしておけば良い．

- [What's Coming in Go 1.8](https://tylerchr.blog/golang-18-whats-coming/)
- [Go 1.8 toolchain improvements](https://dave.cheney.net/2016/11/19/go-1-8-toolchain-improvements)
- [Go 1.8 - Plugins!](https://jeremywho.com/go-1.8---plugins/)
- [Golang 1.8 でやってくる database/sql の変更点](http://mattn.kaoriya.net/software/lang/go/20161106232834.htm)
- [The default GOPATH](http://golang.rakyll.org/default-gopath/)
- [HTTP/2 Server Push](http://golang.rakyll.org/http2push/)

Testingに関してはHashicorpのMitchell Hashimotoの[
Advanced Testing with Go](https://speakerdeck.com/mitchellh/advanced-testing-with-go) は今すぐ使えるテクニックばかりで良かった．

Performanceに関してはUberのPrashant Varanasiのgo-torchの発表[Profiling and Optimizing Go](https://www.youtube.com/watch?v=N3PWzBeLX2M)が華麗すぎて何度も観た．またプライベートで開催したがDave Cheneyの トレーニング [High Performance Go](http://talks.godoc.org/github.com/davecheney/high-performance-go-workshop/high-performance-go-workshop.slide#1) もとても勉強になった．

今年はGopherConに参加した．全ての発表が面白かったが特に以下が自分的には面白かった．

- Katrina Owen [Mind the Gap](https://www.youtube.com/watch?v=ClPIeuL9HnI)（これからGo言語を勉強しようと思っている人とGo言語を教える立場にある人の両方に響く素晴らしいトークだと思う）
- George Tankersley [Go for Crypto Developers](https://www.youtube.com/watch?v=2r_KMzXB74w)（CoreOSの中の人による現時点で使うべきcryptoパッケージについてのトーク）
- Daniel Whitenack [Go for Data Science](https://www.youtube.com/watch?v=D5tDubyXLrQ)（Data ScienceだとPythonを使うことが多いが依存が面倒くさいしGoを使ってくのが良いのではないかという話．結局Data Scientistはデータの収集や整形に多くの時間を使うからGoは適してるのでななどなど）
- Keith Randall [Inside the Map Implementation](https://www.youtube.com/watch?v=Tl7mi9QmLns)
-  Rob Pike [The Design of the Go Assembler](https://www.youtube.com/watch?v=KINIAgRpkDA)
- Francesc Campoy [Understanding nil](https://www.youtube.com/watch?v=ynoY2xz-F8s)
- Alan Donovan [Navigating Unfamiliar Code with the Go Guru](https://www.youtube.com/watch?v=ak97oH0D6fI)

その他

- [Codebase Refactoring (with help from Go)](https://talks.golang.org/2016/refactor.article)（Go1.8で入れるか揉めたType aliasesについてなぜそれが必要か by Russ Cox）
- [Go microservices workshop example project](https://github.com/peterbourgon/go-microservices) （Go-kitの作者によるGolangによるmicroservicesのワークショップ資料）
- [go bits](http://golang.rakyll.org/)（Go teamのrakyllのブログ．本格的に更新され始めたのは今年からではないか．次期バージョンの新機能をわかりやすく紹介してて良い）
- [Don’t just check errors, handle them gracefully](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully) (`pkg/errors`は今年登場したばかりだが必須のパッケージになってきた )
- [So you want to expose Go on the Internet](https://blog.gopheracademy.com/advent-2016/exposing-go-on-the-internet/) (Cloudflareは`net/http`パッケージの知見の塊)
- [Visualising concurrency in Go](http://divan.github.io/talks/2016/gophercon/#/)（idanyliukによるgoroutineの可視化プロジェクト．GopherConでの発表も感動する）
- [Idiomatic Go Tricks](http://go-talks.appspot.com/github.com/matryer/present/idiomatic-go-tricks/main.slide#1)
- [Go is for everyone](https://medium.com/@mattetti/go-is-for-everyone-b4f84be04c43#.z1muuyugl)
- [Gopherくん入門](http://write.kogus.org/articles/S78LHt)


（まだまだあったと思うので随時追加する）