Posted at

プログラミング言語Go読書会#12(7.5.1-7.10)[2017/06/14]

More than 1 year has passed since last update.

Go読書会 #12ランサーズ株式会社で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容はプログラミング言語Goを冒頭から皆で読み進めていくというものです。


進捗した内容


  • 7章 インタフェース


    • 7.5.1 警告:nilポインタを含むインターフェースはnilではない

    • 7.6 sort.Interfaceでのソート

    • 7.7 http.Handerインタフェース

    • 7.8 errorインタフェース

    • 7.9 例:式評価器

    • 7.10 型アサーション




話題に上がった話


7.6 sort.Interfaceでのソート

ここでは、goに用意されているsort.Interfaceを利用したソートの書き方が書かれていました。これはLen()Less()Swap()という3つを満たした状態にすればsortを実装出来ます。goの場合、基本型はa,b = b,aといった入れ替えが出来るので、swapは必要なんですかという疑問が出ましたが、構造体など複雑なデータ構造を入れ替えるのに必要だという話をしました。


7.8 errorインタフェース

ここでは、errorStringの基底型が構造体であることと、Newのすべての呼び出しは、互いに等しくない全く異なるインスタンスを割り当てますというところが話題になりました。意図しない同一のエラー比較などが行われないような仕組みが組み込まれていました。


7.9 例:式評価器

コンパイラの話で良く出てくる電卓の作成のようです。単純な算術式に対する評価器(evaluator)を作成する項目でした。実際にコンパイラ等に関わることが少ない人もいたので評価器に対して説明したり、有効そうなリンクを探してみたりしました。


7.10 型アサーション

これは、インタフェース値へ提供される演算で、x.(T)という構文で型を指定して、オペランドの動的な型がTと一致するかどうかを検査するものです。型が違っていた場合panicが起きるので安全に開発できるところがうれしいですね。

w = os.Stdout

f := w.(*os.File)

ここまで呼んだところで、時間になりました。次回は 7.11 型アサーションによるエラーの区別です。