「初めてのGo言語」を読んだ
Go言語に入門するって
今回ありがたいことに GoAcademy の第 3 期に参加させていただくことになり、5 月の頭から Go 言語にちゃんと入門をはじめました。
サイバーエージェントがエンジニア向けの「Go Academy」第3期を開催
当社はインターネット領域において、メディア事業、広告事業、ゲーム事業といった事業を展開し、創業来、市場環境の変化に合わせ多くの新規事業を立ち上げ、拡大させることで成長を続けてまいりました。このような背景の元、新規事業開発に携わるエンジニアの育成・採用を目的に、当社において導入実績の多いGoをテーマとしたバックエンドエンジニアを育成する特別プログラム「Go Academy」第3期を2023年5月より開催いたします。「Go Academy」では、現在IT・Web業界でエンジニアとして携わっている方、エンジニアとしてWeb以外の開発をしているがWeb開発に興味のある方を対象に、外部より講師を招いた全8回のプログラムでGoの言語仕様からパブリッククラウド、データベースを用いたWebサービス開発まで一連の流れを習得することを目標としています。
講義を受けたら復習しないとね、ということで、今回は以前から気になっていた「初めての Go 言語」を一通り読みました。
Go 言語に関する本としては 1 冊目でしたが、とても良かったです。
初めてのGo言語
イディオマティックなGo言語の解説書。構文がシンプル、静的型付け、タイプセーフでメモリセーフ、バグが入り込みにくい、並行処理が得意、実行速度が速い……これらの魅力的な特徴を生かすためには、Go言語らしい書き方を可能にする「イディオム」を学ぶ必要があります。Go言語のイディオムをマスターすれば、効率的で読みやすいコードを書けます。本書では、Go言語の基本機能を明快かつ簡潔に説明しつつ、イディオマティックなGoコードの書き方やGoプロジェクトの設計方法を解説します。読者はベテランのGo開発者のように考える術を学べます。
どこがよかったの?
ちょうどよい難易度とわかりやすい話の流れ
何かしらの言語を知っている人向けで、本当に基礎的な内容は省きつつ Go の特徴を解説してくれています。
記載の流れがとてもわかりやすく、最初から最後まで順に読むことで、順に Go 言語の特徴を学ぶことができるのも良き点です。
また、json や http などよく使うパッケージやテストについても一通り網羅されています。
正直読んだだけでは使いこなせないですが、この本のこの部分を読めば基礎をさらえる、という脳のインデックスが一つ増えました。
必要な時に戻ってきます。json とか http なんてのはすぐにコンニチハ!しそうですが。
仕組みについても触れられている
個人的にとてもよかったのが、Array や Slice のメモリ確保の仕方やポインタの振る舞いを図示しながら解説してくれていたところ。とても理解しやすかったです。
他にも、全体的に読んでいて「なるほどなぁ」となるところが多かったです。
使うべきところ/使わないほうがいいところを教えてくれる
こういう、「初めての~」とか「入門~」という本ではよく「できること」に焦点が当てられていて、「こういう時は使わない方がいい」といったアンチパターンにはあまり触れられていない印象があります。
しかし、この本の中では一貫して「イディオム的な Go のベストプラクティス」とは何かに重点が置かれており、単に「できること」ではなく「如何に Go 言語らしく書くか」を学ぶことができたと思います。
充実の付録
日本語版の本書には、オリジナル付録として「Go 言語のまとめ」と「実例で学ぶ Go 言語入門」がついています。
これがめちゃくちゃイイ。
まず「Go 言語のまとめ」は文法的なまとめもさることながら、ほかの言語では見られない点や、Go のイディオムなどについてコンパクトに纏めがなされています。
テスト前にさっと見直すのに良い分量。
「実例で学ぶ Go 言語入門」は、決して長くはないけれど、Go 言語を書き始めたら割とすぐに書きたくなるようなコードをいくつか紹介してくれています。
本文中では以下のように紹介されている通り、Go 言語になじむのにとてもよい例文集でした。
ほかの言語(特に C や C++)をある程度ご存じの方のための、サンプルプログラム集です。原 著の最初のほうの章には、まとまったコードがあまり書かれていないので、以下に示す例題をざっ と読んでおくと、Go の世界に馴染んで、本文の内容がわかりやすくなると思います。
私は先頭から読んだので本文を一通り読んだ後に付録を読みましたが、ほかの言語経験があるなら付録に先に目を通しておけばオーバービューがざっくりつかめて本文の理解度が上がったかなと思います。
総じて
レベルの高い入門書、ということで Go 言語のできることと Go 言語らしい書き方を学ぶのにとても良い本でした。
ただし、1 つ目のプログラミング言語を学ぶのには少し敷居が高い印象。また、言語開発経験が浅い場合は付録に先に目を通す、公式のチュートリアル A Tour of Go から始めた方が理解が深まるでしょう。
この本は、順に読むことで Go 言語を一から学んでいくこともできますし、辞書的にも使えます。
一回読んだからと言って Go 言語完全に理解した()とはならないので、折に触れて読み返していきたいと思います。
次は何を読もうか
Input だけではすぐに忘れてしまうので、スモールステップでなにか作っていきたいですね。
Go 言語で Web アプリケーション開発に触れないのはなぁ、という思いがあるので次は以下の本を読んでみようかなと思います。
詳解Go言語Webアプリケーション開発
Goは2012年3月にバージョン1がリリースされてから約10年が経ちました。その間Goは多くの企業で利用され、その利用シーンもさまざまです。本書はGoでREST API Webアプリケーションを開発するときに必要な知識に特化した内容になっています。 本書は前半でWebアプリケーション開発の事前知識としてGoの設計思想や知っていると便利な標準パッケージの機能について紹介し、後半でGoを用いたWebアプリケーションのコードをハンズオン形式で解説します。 また、本書ではベテランGopherが暗黙知的に行なっているイディオムの解説や、標準パッケージやメジャーなサードパーティOSSを使った実践的なコーディングテクニックを紹介しています。
一方で、低レイヤもちゃんと学んでみたい思いがあり、以下の本も気になっています。
Goならわかるシステムプログラミング 第2版
OSやメモリのこと、もう少しだけ詳しく知っておきたい!でも何から手を付けたらいいかわからない。教科書を読んでみても、ふだん書いているコードと違いすぎていまいちピンとこない……。そんな方々のために、アプリケーションのコードから降りていくことで俯瞰的かつ具体的に低レイヤを自分の糧にできる、たくさんのエンジニアに読まれた名著の改訂版です。