フューチャー技術ブログ

Go入門の軌跡

Gopher wan designed by Renee Frenc.

はじめに

こんにちは。TIG DXユニットの今泉です。
秋のブログ週間の2本目です。

業務ではJavaを使用する機会が多かったのですが、今年に入ってからGo言語を扱うようになりました。

これまでプライベートではエディタに叱られながらGoを雰囲気で書いていたりはしたのですが、これを機にしっかりと学ぶことにしました。

本記事ではキャッチアップのため自分が参考にさせていただいたリソースを紹介させていただきます。

一通り学んだ結果、コードが読み解けなかったりWeb API開発で困るような場面はかなり減ったと思います(コードレビューでGoっぽくないよね、みたいな指摘は受けるのでまだまだ精進は必要です)。

言語仕様を学ぶ

  • A Tour of Go
    Goの言語仕様をブラウザ上で学ぶことができる公式のチュートリアルです。
    実際にコードを実行しながら一通りの書き方や仕様を把握できました。
  • Effective Go
    Goらしい書き方が紹介されているガイドラインです。こちらも公式から。
    時々思い返したように見直したりします。
  • Goを学ぶときにつまずきやすいポイントFAQ
    Goを始めて一番最初につまずいたポイントは大体この記事で解消できました。
  • JavaプログラマーのためのGo言語入門
    実際に今まで自分が利用していた言語との違いを把握することで、より経験に近い形で仕様についての理解を深めることができました。Javaプログラマーの方はまず本記事を読んでGoの解像度を高めることで、より早くキャッチアップができると思います。
  • How to GO
    基本的な文法について「これってGOでどう書くんだったっけな..?」となった時にいつも参考にさせていただいています。

コードを読む

  • golang/go
  • Goの標準ライブラリのコードリーディングのすすめ
    やはり新しい言語に触るからには標準ライブラリの仕様について正しく理解しておきたいものです。よく利用するため距離が近いというのも精神的なハードルが低くてgoodです。
    と、いいつつも標準ライブラリだけでかなりのボリュームがあるためどうしようかと思案していたところ、フューチャー技術ブログで標準ライブラリのコードリーディングについて言及していた記事があったので参考にしてerrors、net/http、sort、testingあたりを読みました。
    またコードリーディング会やらないかなあ…(当時私はGoに入門していませんでした)。
    また、Wikiにもかなり有用な情報が詰まっていたので参考になりました。
  • Goのテストに入門してみよう!
    コードリーディングを始めたもののtestingパッケージが激ムズだったので、知識の補完に参考にさせていただきました。
  • Goのおすすめのフレームワークはnet/http
    私はWeb開発が中心のため、なにかWebフレームワークのコードも読んでおこうか…と思ったのですが、いざ読んでみると「はわわ、これってnet/httpのラッパーじゃね..?」というお気持ちになり、この記事を読んで確信に変わったためnet/http自体を読むようにしました。

書籍を読む

  • 実用 Go言語
    Goはシンプルな言語であるがゆえにある機能を満たすコードを書こうとすると様々なものを組み合わる必要があります。
    本書ではその組み合わせ..つまり、より実用的なGoの書き方について紹介されており、自分がGoでの開発を進めていく中で必要になったテーマをつまみ食い的に読んで参考にさせていただいています。インターネットではお目当ての知識にたどり着くのが大変ですが、目次を見ただけでサッと欲しい情報が得られるのが書籍の強みですね。
  • Real World HTTP
    Goについてではなく、ウェブの知識や技術について触れている書籍です。
    元々、HTTPの基礎を学ぶため数年前に購入していたものですが、そいうえば実装がGoで書かれていたな、と思い出し知識の整理も兼ねて読み直してみました。
    net/httpライブラリを読んだあとに本書で紹介されているコードを自分で実装してみたりすると理解が進んで気持ち良かったです。

おわりに

分かっていたことではありましたが、自分がGoをキャッチアップするのにかなり当社のメンバーが外部発信している記事/書籍に助けられています。

日本語での2次情報はほぼ当社から得ているかもしれません…。
これらのリソースを享受するだけではなく、発信する側にも回れるよう引き続き努力していきたいと思います。