仕事の合間にGoを触ってみた感想

 ひとまずA Tour of Goをひと通りやったので、感想をしたためておく。

感想

  • なんかプログラム書いてみるとよいC言語を触ってる気持ちになる
    • 匂いが似ている気がする
  • Mapの型の書きかたがちょっと慣れない
    • が、なにかしら大きめのアプリケーション書いていたら多分慣れそう
    • このへんは書き続けていると身につくでしょう
  • ポインタ周りの記述が値とものと区別しなくていいのは利点でもあるが、間違いも起こりそう
    • ある構造体の変数sのメンバxにアクセスするときs.xとなるけど、sがポインタでも値でもアクセスする記述方法は同じ
    • 大っきいアプリ書く時にミスりそうな気もするけど、まあ直接アクセスするような書き方ではなくメソッドを定義するだろうから、気をつけるとは思う
  • GoroutineとChannelがとにかくいい
    • 並行処理を書いたりするのがすっごい楽
    • A Tour of Go*1の最後のほうで二分木を読み出すWalk関数を作る練習問題があるが、「うおお、楽しい!」と脳汁が出た
    • お仕事の都合上、重い帳票をバックグラウンドで非同期に生成して……ということも多くresqueを使っているけど、Goだけで似たようなものを作れそうなのはいい
  • しかし検索しづらい言語名だこと

 後は手元に一冊ぐらい本を置いておいて、それなりの規模のアプリケーションでも作ってみるかなぁ。

基礎からわかる Go言語

 評判はどんなもんなんですかね?

A Tour of GoでGoの世界を巡っていたときのメモ

  • ポインタ周り
    • var := &hoge
    • var hoge *Hoge = Hoge()
    • &でポインタが取れるのはCと同じ
    • ポインタ演算はできない
    • new(型)でゼロ初期化されたメモリ領域のポインタを返す
  • Map
    • 型の書き方がわかりづらい
    • var m map[キーの型]値の型
    • 使用する前に make ( new じゃない)で作成する必要があります
    • これどうよ?
  • メソッド
    • クラスはない
    • メソッドを任意の型に生やすことはデキる
func (hoge 型名) 関数名() 関数の戻り値の型 {
    return hogehoge
}
  • わかりにくい………
    • 慣れれば分かる?
  • 構造体のポインタに対してメソッド生やしてるのは、コピーとか発生するから?
    • ひとつはその通り
    • もう一点はそのメソッドがオブジェクトを変更できるから
  • そもそもポインタと普通の値とで呼び出し方が一緒なので、区別出来なさそう
    • 区別できなくてもいいという判断?
  • エラー処理
    • 文字列を返すError()という関数を定義
    • 組み込み型のerrorと紐付けられる
  • Goroutine
    • go 関数名(引数)で新しいgoroutine上で関数を実行
    • 関数名(引数)でデフォルトのgoroutine上で関数を実行しているという意味
    • goroutine同士は同じメモリ空間上で動いているので排他処理が必要となる
    • 記述は簡単だと思う、ここまで記述が簡単だと色々捗る
    • Selectで複数のgoroutineを扱えるのはわかりやすい
    • ただちゃんと書かないとデッドロックしまくりそう
      • なのでちゃんとその辺は理解して書こう

*1:これは日本語版