去年辺りから少しずつGolangを書くようになってきたので所感をまとめました。
"実現する方法は一つ、なるべく一つであるべきだ"
Goは文法がシンプルなので何かをするときの書き方がいくつもあって混乱することがありません。
これはPythonの考え方と似ていて非常に好印象でした。
リスト内包表記的なものはない
Goでは map
, reduce
といったリスト系メソッドも用意されておらず、for
を使います。
最初は「えぇ・・」と思いましたが、これもまた、"実現する方法は一つ、なるべく一つであるべきだ" の考えだと思って納得しました。
gofmtがとても便利
gofmtによるコード自動整形によって、細かなフォーマットの違いに悩まされることがなくなりました。これはとても気楽!
go vet
も併用することでちょいミスも早めに気付けてとても良いですね。
開発ツールには VSCode が便利
VSCodeを入れてGo拡張をインストールするだけ!
いい感じの環境が整います。
VSCodeは軽い感じのエディタなのですが、go拡張を入れると賢いコード補完や自動gofmtなどついてきて最高でした。
if err != nil
が面倒
Goには例外がなく、以下のように毎回エラーチェックをする書き方が基本ですが、これは面倒に感じました。「エラー処理を怠るな!」っていうGolangの意思なのかもしれませんが、本当に面倒です。。
res, err := GetResponse()
if err != nil {
// handle error...
}
string と []byte の扱い
どちらもバイト列を示すものだが、string
はimmutable, []byte
は mutableという点で使い分ける、と認識しています。
http://joshua.poehls.me/2014/04/go-101-string-or-byte-slice/
このサイトで学びました。
ポインタ難しい
Goにはめずらしくポインタがあります。
構造体メソッドのレシーバーの型をポインタ型にするべきなのか迷ったり。やはりポインタは難しいです・・。