『入門Goプログラミング』を読んだ

 

入門Goプログラミング

入門Goプログラミング

 

 

 GoでAPIサーバを作ったことをきっかけにGoをちゃんと学びたいと思ったので読んだ。

「A Tour of Go」をやったものの正直あまり理解できていない部分が多いままであったが、この本を読んで理解が深まった。

スライス、構造体、インターフェース、レシーバ、ゴルーチンなどの基本的な使い方だけではなく、結局どう使うの?いつ使ったら便利なの?ということも書かれているのがよい。コード例が豊富なので手を動かしながら学べる。

以下の文は、インターフェースを説明した文の引用だが、インターフェースとはなんたるのか非常にわかりやすい説明をしてくれている。

メモを書くのに使えるのは、ペンと紙だけではありません。手元にクレヨンとナプキンがあれば、同じ目的に使えます。クレヨンでも、マーカーでも、シャープペンシルでも、「メモ帳にメモを書く」というニーズを満たすことが可能ですし、「厚紙にスローガンを書く」のにも、「雑誌に記事を書く」のにも使えます。このように、「書く」は、非常に柔軟性が高いのです。Goの標準ライブラリには、書くための「インターフェイス」があります。それにはWriterという呼び名があり、それを使って、テキストも、画像も、CSVも、アーカイブの圧縮出力も、書くことができます。あるいは、画面に書くことも、ディスクのファイルに書くことも、Web要求に対する応答を書くこともできます。1個のインターフェイスによる援助によって、Goでは、いくらでも多くのことを、いくらでも多くの場所に書くことができます。Writerも、非常に柔軟性が高いのです。「0.5ミリの青インクのボールペン」は、具体的なものです。それに対して「筆記用具」は、もっとファジーな(輪郭が曖昧な)概念です。インターフェイスを使うと、コードは「なにか書くもの」というような「抽象概念」を表現できできます。「それは何か」ではなく「それで何ができるか」を考えるのです。こういう考え方を、インターフェイスを通じて表現すると、変更に対応できるコードを書きやすくなります。

NathanYoungman;RogerPeppé.入門Goプログラミング(Kindleの位置No.4496-4508).株式会社翔泳社.Kindle版.

 

あとは特にコラムの中でRobPikeの言葉を引用している部分もいくつかあり、Goの設計思想も学べる。

Goは継承よりもコンポジションを推奨します。シンプルな、しばしば1個のメソッドによるインターフェイス(…)が、コンポーネント間のクリーンで理解しやすい境界として働きます。-RobPike,"GoatGoogle:LanguageDesignintheServiceofSoftwareEngineering"

NathanYoungman;RogerPeppé.入門Goプログラミング(Kindleの位置No.4629-4633).株式会社翔泳社.Kindle版.

 

エラーは値だ。
エラーは、ただチェックするのではなく、きちんと処理すべきだ。
パニックは禁物。
ゼロ値を有効にせよ。
インターフェイスが大きいほど抽象性が弱まる。
空のインターフェイスは、何も言わないのと同じ。
gofmtのスタイルは誰も好きではないが、gofmtは誰にも好ましいツールだ。
ドキュメントはユーザーが使うもの。
ちょっとコピーするほうが、ちょっと依存するより良い。
賢いコーディングより、明快なコードが良い。
並行性は並列処理ではない。
メモリ共有で通信するな。通信でメモリを共有せよ。
チャネルは編成する。ミューテックスは直列化する。
-RobPike,"GoProverbs"

NathanYoungman;RogerPeppé.入門Goプログラミング(Kindleの位置No.5470-5478).株式会社翔泳社.Kindle版.