はじめに
仕事でGolangを書き始めて二週間くらい経ったので、新しくGolangを覚えるのにコツになりそうなところをまとめてみました
tl;dr
- 自分の知っている言語との差分を知る
- コンパイラを意識する
- Golang本体のコードを読む
自分の知っている言語との差分を知る
どんな言語でも基本ですが、すでに習得している言語との差を意識するのが覚える第一歩かと思います。
今回勉強の参考にした『スターティングGo言語』ではさわりの部分などで、そういった視点が意識されており、入りやすかったです。
個人的には、Python, Javaの経験が長いのですが、CとJavaの経験がある程度役に立ったように思います。
* C言語: Golangが互換性を持っており、考え方のベースになっている。知ってるとポインタでつまづかなくて済む。
* Java: 構造体に対するメソッドはOOP的、構造体への構造体の埋め込みは継承に近いなど、OOPっぽい考え方で捉えやすい仕様がある。ただし、それに引っ張られすぎて、OOPっぽく実装するのは多分よくない。
コンパイラを意識する
Golangの有名な特徴の一つに、コンパイルの早さがあります。
型推論を採用しながら驚異的にコンパイルが早いのは、コンパイラに気を使った言語仕様になっているからだと感じます。
パッケージの仕様に特にその部分を感じます。
struct
に異なるパッケージのinterface
を設定できないのは、パッケージに仕様を閉じておきたいという意図を感じます。
パッケージの関連が複雑になると必然的にコンパイル時の処理(処理順など)にも跳ね返るため、前述のような意図があるのではという結論に達しました。
Golang本体のコードを読む
https://github.com/golang/go
言語そのもののコードが困ったらすぐに確認できるのはGolangのいいところです。
実装上の勉強にもなりますし、気になる仕様があればすぐに確認できます。
標準的なライブラリで返り値が正しいのか、気になったらすぐにコードを読むことにしています。
最後に
以上のやり方で、小さいアプリを書く分にはそれほど困らない理解度にたどり着けたと思います。
Golangは軽量かつ高速に開発でき、コードの可読性の高さにはかなり好意的に感じています。
反面、よく指摘されるようにやや冗長なコードや他の言語ならできた痒いところに手が届かない感じが気になるのも事実です。
環境を問わないなどのGolangの良さを踏まえて、適切な場面で使っていきたいです。