Go言語に入門する

先週末、仕事で東京に行く機会があって、往復の新幹線の中でまとまった時間が取れるなと思ってGo言語に入門していました。Go言語に入門する理由は

  • 仕事で普通に使う(mackerel-agentなど)
  • 職場で評判がいい
  • 一年に一個は新しい言語を勉強しようっていうアレ

などなどです。本やtour of goを読むだけだとあまり頭に入ってこないので、複雑過ぎず簡単過ぎない例をやろうということで平均化パーセプトロンで二値分類を書きました(ファイルの読み込み、文字列操作、スライス、Mapの基本的な操作、structの使い方などがちょっと身に付く)。Perlに再入門、Scalaを勉強するときもこのネタだったので、定番になってきつつある。コードはこの辺に置いてます。

ちょっと困った箇所

失敗するかもしれない計算の戻り値の型

scalaでいうところのOption[XXX]を返したい。結論から言うと(x *XXX, err error)を返すのがよさそう(XXXはstructを想定)。計算がちゃんとできたときはreturn &x, err、失敗したときにはreturn nil, errを返すという感じ。ポインタ型だとゼロ値がnilなので、参照ではなくポインタを返すことが多いらしい。

一行が長すぎるとreadlineで失敗する

この辺。20newsをデータでやっていたら一行の入力が長すぎて失敗するときがあった。isPrefixで行末いくまで待つ、というのが解決法っぽい。

ほぼ初めての言語を新幹線のオフライン環境でやるための工夫

新幹線でなければ普通にぐぐればいいんだけど、新幹線だとぐぐれず困ることがあるだろうということで前日に準備した。

オフラインでTour of Go

Tour of Goに基本的な概念がまとまっていてよいのだが、オフラインで見れないので見れるようにする。ローカルでサーバーが立つので、それで解決。

go get golang.org/x/tour/gotour
~/go/bin/gotour

Emacs、REPL

この辺のツールがひたすら充実している。go-mode入れて、godefとかを入れておくと関数の定義元にさっと行ったり、変数の型、関数の引数/戻り値の型がさっと見れて最高だった。ensimeを動かすのに結構苦労したあの時間は何だったんだろうという簡単さ。

dashでドキュメントを見る

Tour of Goは目次はあるけど、検索ができないのでdashで引けるようにする。Emacsからサクっと引けるので最高だった。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】