対象読者
普段PHPとかRubyといった動的型付け言語でWebを触っているけれど、最近Goの名前をよく聞くので気になっている方
Go超初心者の、備忘程度の内容です。
まだHello Worldと少しぐらいしか触ってないので、メリット・デメリットはこれからたくさん出てくると思います。それくらいの習熟度になったら、また記事書くかと思います。
ちなみに筆者は普段PHPを使うことが多く、コンパイラ型言語や静的型付け言語を触るのは、大学時代に学んだC言語以来、数年ぶりです。
良いと思ったところ
- Goの文法理解するサイト「A Tour of Go」がとても良い。
- 大抵の言語でハードルとなる「環境構築」が一切要らず、Webサイトでソースコード付きの解説&Web上でコンパイル&実行ができる。
- 無駄を排除している。細かいけれど、switch文がbreak無しでbreakしてくれるところとか。break書かないswitch文、確かに圧倒的に少ないですよね。他にも()や;といった、お作法的に付けるけどtypoで構文エラーになるだけのものが不要なのが良い。
- 型推論と、上記の無駄排除の方針により、静的型付けだけど変数宣言が非常にスマート。下記のように書けるので、varやらintやら書かなくてOK。
text := "hoge" // 変数textの宣言(中身はstringのhoge)
num := 10 // 変数numの宣言(中身はintの10)
- コンパイル時に未使用変数があるとエラーになる。エディタの設定じゃなく言語仕様として実装されていると大人数開発でも必然的に統一されるので、こういうところはコンパイラ型言語の強みだなあ
- 標準でインデント整えたりするフォーマット機能が付いている。これも上と同じく、エディタの機能に頼ることなく統一できる。素晴らしい。
- 外部パッケージから利用できる変数や関数は先頭を大文字で、利用できないものは小文字というルールがシンプルかつ分かりやすい。publicは先頭大文字、privateは先頭小文字、みたいなものかな?
ちょっと面倒だと思ったところ
- 配列が固定長で、後から要素を追加できない。スライスというものを使えば他言語のようなことができるっぽいが、まだ理解していない。
- Try&Errorをしていく中で、やっぱりコンパイルは少々面倒。Vimmerなので、ファイルを変更したら保存して閉じて、コンパイルして、実行して…もう少し効率的な方法もありそうだけれど。
その他
- とりあえず実行が早いらしい。そもそもコンパイラ型で遅かったら、チョイスする意味がだいぶ薄れるが。ただし実感値として早い/遅いを感じるレベルのものをまだ作っていないので、「早いらしい」としか現時点では言えない。
- 関数の返り値を複数返せる。これはまだ必要になるほど触れていないので、メリデメは現時点でよく分かっていない。
- ループがforしか無いらしい。foreachとかwhileとか無い。最低限の機能しか提供せずに誰が書いても同じような書き方にするためのような気がするが、これも現時点でメリデメが実感できていない。
- Goを勉強しているのにgoroutineまで未到達。早く学んで使えるようになりたい。