🐿️

Go の学習に参考になった資料集

2022/08/07に公開
2

gopher
Credit to Renée French for the Go Gopher logo

概要

この記事では、自分が Go について学ぶために参考になった学習リソースについて紹介します。
自身が初学者のときから今まで、ずっと参考になっているものを集めました。

幅広く参考になれば幸いですが、自分が過去に戻って Go を学び始める自分におすすめするならというような気持ちで書いています。
→ メインの想定読者は Go の初学者

リソースについてですが大きく「公式」「書籍」「コード」の3観点(+その他)でまとめました。
結論から言うと、「公式から学ぶ」は誰にでもおすすめできます!それ以外は自分の状況や好みでぜひ参考にしてみて下さい。 というような温度感です。

※ Go の開発環境の構築やプログラミング基礎の tips などはこの記事でわかりません

公式から学ぶ

A Tour of Go

https://go-tour-jp.appspot.com/welcome/1

「何も考えずに進められる公式のチュートリアル」として、まずはこれをおすすめします。
Go を始めるならまずはこれというもので、デファクトスタンダードになっていると思います。
一通りの書き方に加えて、ざっくりと思想や、仕様について把握することができます。

Effective Go

https://go.dev/doc/effective_go

Go-like な書き方をするための tips 集。非公式の日本語訳もあります。
読み直したり、レビュー時に引用したりと腐らないドキュメント。
公式でこのような簡潔でわかりやすい資料があるところが Go の良い部分であると思います。

Go に入っては Go に従え とはよく言ったものですね。

Go Code Review Comments

https://github.com/golang/go/wiki/CodeReviewComments

Go コードのレビューに寄せられた一般的なコメントをまとめているという公式のドキュメント。
Effective Go の捕捉と言われていて、同様に参考になります。
ここらへんは読みやすいし、シンプルに面白いです。
どちらもコーディングの指針として大変参考になります。

Go Style | styleduide

https://google.github.io/styleguide/go/

Google での Go のコーディングスタイルガイド。Go 公式ではないが Google ということでこちらに掲載。Effective Go や Go Code Review Comments をベースにより具体的にルールに落とし込んだもののイメージを持っています。

いくつかドキュメントがあり、以下のように分かれています。

ドキュメント 対象
Style Guide 全員
Style Decisions メンター
Best Practices 興味のある人

下に行くほど細かくなっていきます。Style Guide は基礎的でライトな内容なのでぜひ読むことをおすすめします。
Style Decisions, Best Practices もコーディング上の細かい部分についてのスタイルになっていきます。
これも1つのコーディング規約で Must なものでもないので、チームや状況を加味しつつ参考になる部分は参考にしていく使い方が良いと思います。

Go Conference 2023 で Go Style Guide の発表があり面白かったのでぜひ →Go Conferenece 2023game

言語ドキュメント

https://go.dev/doc/

Go は公式ドキュメントが薄くまとまっているから、まずドキュメントを読めといわれるやつ。

とはいうものの、実際に0からのスタートだとハードルが高い印象でした。
ざっと読みつつあとで見返すとか雰囲気掴んでから後で読むとかいう使い方が個人的にはあっていました。

書籍から学ぶ

書籍に関しては、基礎の基礎といったようなコテコテの入門書は紹介していません。
個人的な感想として、Go の入門は公式ドキュメントを読んだり、コードを書いたりすることが最も効果的だと思います。
書籍は辞書のように、より応用的な部分で参考にすると良いでしょう。

もし入門書をお探しであれば、個人的には スターティング Go 言語 が広く浅く知ることができて役に立ったと思います。

実用 Go 言語

実用 Go 言語 ―システム開発の現場で知っておきたいアドバイス

ここ最近で感動した本。
基礎的な内容から、応用的な内容まで幅広く紹介していて、読みやすく、改めて勉強になる部分も多くとても参考になりました。
出版が 2022 年 5 月ということもあり、 Go1.18 の内容も含んでいて ◎ です。
Go を学ぶならまず買っておいて良いと思います。
内容がすぐにわからなくても、必要な部分について読み返すというような使い方でも良いと思います。

初めての Go 言語

初めての Go 言語 ―他言語プログラマーのためのイディオマティック Go 実践ガイド
が発売されました。
結論からいうと「実用 Go 言語」読んでおけばいいと思います。内容も被っている部分が多くこちらの本は日本語訳されたものなので、違和感のある日本語があったりします。わかりやすさ、深さ的にもまず読むなら実用 Go からで良いと思いました。
本単体の評価としては、入門すぎるかなと思ってましたけど、レベルの高い基礎というような内容で結構良かったです。イディオマティックと謳ってるだけに、Go らしい書き方を軸に書かれています。スターティング Go とか tour of go に effective go の内容混ぜたみたいな印象です。

詳解 Go 言語 Web アプリケーション開発

詳解 Go 言語 Web アプリケーション開発

こちらも最近出た本。
Web 開発の観点で色々なアプローチで紹介されていて参考になります。
入門書と言うよりは2冊目の位置。

Go プログラミング実践入門

Go プログラミング実践入門 標準ライブラリでゼロから Web アプリを作る

Web 開発の本。テンプレートエンジンを使ってウェブサーバーを作るみたいな実践的な内容。
フレームワークを使わずに net/http で書かれているので基礎から学べる点がよかったです。

コードから学ぶ

golang/go

https://github.com/golang/go

Go で書かれた Go。
気になる関数潜って雰囲気掴む使い方が良いと思っています。

例)

  • testing
    • テストパッケージのドキュメント。Go がどんなテストを想定してどんな検証ができるかが把握できます。
  • net/http
    • HTTP クライアントとサーバーの実装をするパッケージ。雰囲気だけでも見ておくのは良さそう。

GitHub Trending: Go

https://github.com/trending/go?since=daily&spoken_language_code=

GitHub 公式の日次の Go のトレンドランキング。
たまに見て面白そうなの眺めたりすると面白いです。

https://twitter.com/GolangRepos/status/1555802763103277056?s=20&t=_RWBNcqQ0nThB4UB_mDlNA
こういうのが好きであれば、定期的に良い感じのリポジトリを紹介してくれる ↑ のアカウントもおすすめ。

Github Ranking Top 100 Stars in Go

https://evanli.github.io/Github-Ranking/Top100/Go.html

このサイトでは、GitHub 上でスター数が多い Go のリポジトリをランキング形式で紹介しています。
人気のあるコードはメンテナンスが活発なことが多くコードを見ることで、Go の開発スタイルやアーキテクチャ、コーディングスタイルなどを学ぶことができます。
また、リポジトリのドキュメントの書き方やディレクトリ構成も参考になります。
内容を完全に理解できなくても、様々な Go のコードを見ていくことで、Go におけるコーディングの流儀や慣習について、学ぶことができます。

golang-standards/project-layout

https://github.com/golang-standards/project-layout/blob/master/README_ja.md

「golang-standards/project-layout」は、Go のアプリケーションプロジェクトの基本的なレイアウトを提供するリポジトリです。[日本語訳]
ただし Go を学ぼうとしている場合や、自分で PoC やシンプルなプロジェクトを作る場合には過剰な構成であり最初は main.go, go.mod だけでシンプルに始めようともいっています。

ディレクトリ構成の概要について学ぶことができますが、pkg を使うのは思想に反していて標準じゃない!という issue も上がっており参考程度に留めるのが良いと思います。
https://twitter.com/mattn_jp/status/1387370238165983235?s=20

//grep.app

https://grep.app/

Go に限ったものではないですが、高速で GitHub の人気リポジトリのソースコードを検索してくれるサイト。
使いたい外部ライブラリがあったらまずここにインポート文を入れて検索して。OSS などでどう利用されているかなどを参考にするという使い方をよくします。

その他

The Go Playground

https://go.dev/play/

書いて学ぶ。
簡単なコードや仕様の確認とかによく使っています。
コードをシェアすることも容易なのでレビューや質問などでも使えます。

フューチャー技術ブログ

https://future-architect.github.io/tags/Go/

実用 Go の著者でもある渋川さんが所属する組織であるフューチャーの技術ブログ。
Go については特に力を入れている技術ブログの印象を持っています。
最近は Go のアップデートごとにリリース連載をしており、最新情報のキャッチアップするために二次情報としても大変参考になります。

追記
2023 年 2 月 1 日に Go 1.20 がリリースされましたがその記事もさっそく出ていましたね
Go1.20 タグの記事

memo: 個人的なおすすめ記事

メルカリの技術ブログもハイクオリティで参考になりますが、記事を Go で絞ることができないのは残念です。

スライド

2014 年のスライドですが、公式リファレンスを参考に Go はこう書くべきという説明がわかりやすいコードと共に記載されています。
多くは前述のGo Code Review Commentsからです。

捕捉

公式から学ぶことは間違いありませんが、それ以外は個人の好みや状況によって異なります。
ただ、私が特におすすめするのは、書籍実用 Goです。
今回、Zenn や Qiita の記事やスライドは範囲が広すぎることがあるため、比較的流動的なリソースとして除外しました。

また、プログラミングにおいては、書くことも非常に重要だと考えています。
実務経験を積むことが一番ですが、難しい場合は、Playground や小規模な技術検証リポジトリを作成して自分でコードを書くことも有益だと思います。
私個人としては、Slack Bot や LINE Bot などの実用的なアプリケーションは比較的軽いコードで実装できることが多く導入にいいという印象です。

最後に、他にもおすすめの学習リソースや疑問点など、参考になった情報があればぜひコメントしてください。

その他コメントで頂いた参考資料など

@88888888_kotaさん提供

GitHubで編集を提案

Discussion

88888888_kota88888888_kota

素晴らしい記事ありがとうございます!

以下も参考になるかと🙋

他にも良さげな情報あれば共有します☺️

kotapjpkotapjp

コメントありがとうございます
大変参考になりました!どれも質が高くとてもおもしろかったです!
素敵な情報をありがとうございます!
本記事にも提供情報として記載させていただきました👍