普段Java(特にAndroid, Servlet)をメインに、Javascript, Pythonなどで開発の仕事をしている僕がGo言語を勉強していて参考になったサイトのまとめです。
言語仕様
まあ、大枠は公式見ろって話ですね。
チュートリアルが懇切丁寧なのと、モバイルからでも見やすいので一つずつステップを進めていくだけでもだいぶ覚えられます。
インポート
とりあえず基本のキ。ソースコード書いててファイル分割しようかなー、と思ったときに見るとちょうど良い感じ。
とはいえ、ビルドしたファイルのインポートとか、githubリポジトリからのインポートとか、いろいろパターンがあるのでその辺はまだ勉強不足。。。
クラス
Go言語ではクラスのようなものを作ろうと思ったら構造体を使う。
構造体だけだとフィールド(メンバ変数のようなもの)の定義だけなので、メソッドを定義したければレシーバ付きの関数を定義する。
なんと言うか、ソースコードが「クラス」ありきでないところがJavaとは勝手が違うところ。
継承、インターフェース
インタフェースの実装パターン #golang - Qiita
この辺りがJavaの継承の考え方とは大きく違うところな印象。
Javaはクラスに対して、implementsやextendsで親クラスを宣言するが、Go言語ではインターフェースで宣言されているメソッドを実装したクラスが勝手にそのインターフェースの実装クラスになる。
implementsつけたくなる。っていうかついてないとなんとなく落ち着かない。。。
あと、Go言語では「継承」という概念はない。けど「埋め込み」を使って同じような実装をすることができる。らしい。
関数への参照渡し
お気楽 Go 言語プログラミング入門
これの「ポインタを関数に渡す」あたり。
Go言語ではポインタがある。「ポインタがある」っていうとC言語を研修や授業でちょろっとやったような人に嫌な顔されそうだけど、C言語よりは理解しやすくなっている(というかコーディングするときに理解しなければならない範囲が狭まっている)と思う。
逆にJavaはポインタが文法的に無いばっかりに参照渡しでハマる人が続出しているように思う。
Go言語のように、引数がコピーを渡すのか参照を渡すのかくらい自分で指定できる方が勉強のためにもちょうど良い気がする。
並列処理
// TODO: これから勉強する。並列処理の扱いやすさはGo言語の特徴の一つらしい。
あとはファイル入出力とかDB接続とかWebサーバ立てたりとかもやってみたけど、まだ「あーなるほどこうやって書けば動くのね」程度の感想しかないため、割愛。
しかし、Go言語はシンプルだから数日で書けるようになるよ!って書いている人がたくさんいる中、1ヶ月たってまだこれくらいしか書くことがないってどうなんだろうか。。。
(おまけ)僕の中の言語に対する勝手なイメージ
- Java:機械の部品を作って組み立ててるイメージ
- Javascript:何か好きなものを好きなように作るイメージ
- Go:石職人