書評——『Go言語プログラミング』

4173 ワード

Alan A.A.DonovanとBrian W.Kernighanが共同で編集した新刊書「Goプログラミング言語」(Go Programming Language)Goという言語について素晴らしい紹介を行いました.本書は、Go言語が2015年8月に発表した最新の安定版1.5に含まれる内容をカバーしています.読者はCやPythonスタイルの言語のプログラミング経験を備えなければなりませんが、特定の言語に限定されません.Goはコンパイル型のタイプ化言語であるため、このプログラミング経テストの開発者は、スクリプト言語や非タイプ言語に偏っている開発者に比べて、この言語の学習曲線はそれほど急峻ではありません.
本書の前半は、ソースファイルのフォーマットとUnicode符号化、変数、値タイプ、構造体、Map、配列、Sliceなど、Goプログラミング言語の基礎をカバーしています.前半の最後には,Go言語の異常処理メカニズムPanicとRecoverについて述べた.
本書の後半は、Go言語で独自の役割を果たすいくつかの特性に焦点を当てています.継承せずにオブジェクト向けのプログラミング、暗黙的なインタフェースを実現します.もちろん、コンカレントプログラミングも実現されています.本書の終わりの部分では、実用的なパッケージテクニック、標準的なGoツールを使用してテストする方法、反射や非セキュリティコードに関する参考について説明します.
本書全体で説明した例では、対応するコード(本書の公式サイトでダウンロード可能)が提供されています.つまり、次のコマンド(Linuxシステムで)でサンプルコードを実行できます.
$ export GOPATH=$HOME/gobook            # choose workspace directory
$ go get gopl.io/ch1/helloworld         # fetch, build, install
$ $GOPATH/bin/helloworld                # run

他のタイプのシステムでGoを使用する読者にとって、サンプルコードをいくつか調整する必要があります.たとえばGOPATHの設定をset GOPATH="%HOMEPATH%gobook"に変更し、%GOPATH%binhelloworldを呼び出すことで実行します.
本書の第1章(本書の公式サイトで無料ダウンロード可能)は本書のスタイルを表現し、本書の文字の間に豊富な例を提供し、このようなスタイルは本書の終わりまで続いた.
第1章自体の内容は急速に進み,uniqのようなUnixツールの実装によって古典的な「hello world」を実行する例から,アクティブなLissajousグラフィックをどのように生成し,HTTPサービスを通じてそのグラフィックに戻るかについて述べてきた.GoはGoogleから発売された言語であるため,ネットワーク応用例セクションでは並列型web爬虫類の概念も紹介した.
第1章の名前は「ガイド」ですが、しかし、Lissajousグラフィックの例を省略すると、読者は(ネット応用例と)もっといい方法かもしれませんが、特に数学の背景のない読者にとっては.幸いなことに、これらの例は本書の後にカバーされる内容の一部のサンプルにすぎません.読者が後の部分を読むと、もっと簡単に理解できるはずです.読者がこの言語についてもっと理解してから、このガイドの章の後半部分は分かりやすいように見えるはずです.
本書の文字の間に多くの例が提供されているほか、各小節は通常、読者に多くの練習を提供している.実践を通じて学習を行う方法は、読書だけで学習するよりもずっと効果的であるからだ.練習の後、多くの挑戦内容を提供し、読者にもっと複雑な任務を徐々に完成させ、この言語に対する理解を深めるように要求した.
本書第二章の冒頭部分ではGo言語の命名規範を紹介しています.ただし、共通可視の識別子(大文字で始まる)とプライベート可視の識別子については(小文字で始まる)の違いは明確に説明されていません.経験のあるGo言語のユーザーは自然にこの基準を理解していますが、すばやく読むことに慣れている読者は、この詳細を無視する可能性があります.両者の効果の違いは、次の章のパッケージに関する部分まで実際に説明されます.
いくつかの欠点がありますが、本書は読者に多くの良いアドバイスを提供しています.エラーの処理方法を含む(エラーが検出されたときにエラーを回避するためにエラーを選択した場合)、およびdeferを使用してクリーンアップ機能のための処理関数を登録する方法は、反発体ロックを解放する際に特に実用的である.本書はGo言語の基礎内容にのみ触れているだけでなく、本書全体において作業者の真の知識と灼見が随所に見られる.特に、Goのforサイクルでキャプチャ変数をどのように処理するかについて述べるに値する(captured variable)変数の役割ドメインが限られているため、内部で異なる役割ドメインを持つように変数を再定義する必要があります.
for _, dir := range tempDirs() {
  dir := dir // NOTE: necessary!
  // …
}

本書はタイプ、構造体及び関数(function)と方法(method)は、これらの要素の作成と使用法が他の言語と異なるため、重点的に説明しています.本書では、作成方法でReceiverタイプを指定したり、値タイプや参照タイプを選択したりして、this/self以外のカスタム名を使用することができます.インタフェースを使用する場合、タイプや構造体は、あるインタフェースの定義を暗黙的に満たすことができます.意味:空のインタフェースタイプでは、任意の値がインタフェースを満たすことができます.本書はインタフェースを紹介する部分で特に誤りについてのもっと詳しい詳細をカバーして、Go言語の中の誤りはすべてインタフェースの形式で表現したためです.
この「Goプログラミング言語」に対するコメントにGo言語の唯一無二の特性が欠けている場合:コンシステントとパイプ(channel)は、完全な書評とは言えません.この本は65ページ、すなわち、本の20%前後に相当する紙面で、コンシステント(異歩調用関数)の使用方法、および固定サイズ(バッファ)のパイプを通過する方法、または非同期方法について説明しています.(バッファなし)コヒーレント間の相互通信を実現する.パイプを用いて簡単な信号を送信する方法を紹介する際、本書は読者に2つの選択を示した.1つはパイプの閉パケットをトリガとしていくつかの動作を実行することであり、2つはタグシンボルデータを送信することである.(通常、同じ効果を達成するために、ブール値、整数値、または空の構造のみを含む).また、本書では、多重セレクタを使用して複数のパイプ間で信号の取得または送信を行う方法も示しています.
本書では,反発体の使用を重点的に強調した.(mutex)データ保護の重要性は、データ競合条件の問題を回避するだけでなく、一部のプラットフォームでは、コードの順序が変更されたり、キャッシュラインの共有によってプログラムに不一致な結果が生じたりする問題を回避するために、ハードウェア自体がプログラムに強力なブレーキを加える必要があることを強調しています.本書では、さまざまなロックメカニズムについて説明しています.(例えば、単純な反発体または読み書きロック)、各異なる実装形態の性能データの比較が与えられる.
本書では、複数のクライアントからのネットワーク接続や、マルチスレッドのウェブ接続を実行するキャプチャなど、いくつかのシーンでのHTTP処理を読者にどのように行うかを説明します.これらの章の最後の部分では、著者らは、複数のクライアント間でチャットメッセージをルーティングし、リソースの消費を最小限に抑えることができるクライアント/サーバ構造に基づくチャットネットワークの例を紹介した.
本書では、go getツールを使用してパッケージの取得を実現する方法や、go testというテストツールの使用方法、CPU、メモリ、反発体の性能診断ツールについても紹介します.最後に,本書では,非セキュリティコードおよび反射パケットについて簡単に紹介し,これらの特性の応用について適切な警告を提出した:必要でない場合は,それらを使用しないでください.
「Goプログラミング言語」の出版社Addison Wesleyのサイトでは、本の電子版を購入したり、販売店で実体書を購入したりすることができます.
本書の著者について
Alan DonovanはGoogleインフラ部門に勤める主管エンジニアで、ソフトウェア開発ツールを専攻しています.2012年以降、彼はGoチームに参加し、静的分析ライブラリとツールの設計を担当し始めた.oracle、godoc-analysis、eg、gorenameなどのツールの著者でもある.
Brian Kernighanは2000年までにベル実験室のコンピュータ科学研究センターに就職し、Unixのために言語とツールを開発した.彼は現在、プリンストン大学のコンピュータ科学学部で教授を務めている.「Cプログラミング言語」や「プログラミング実践」など、多くの技術書の共同著者の一人でもある.
Book Review:The Go Programming Language