公式サイト
A Tour of Go
Web上で実行しながら学ぶことができる公式のチュートリアルです。
チュートリアル
公式のチュートリアルです。初学者向けからジェネリクスのチュートリアルなども用意されています。
A Tour of Goが終わった後に取り組むと良いでしょう。
Go Wiki
Go Code Review Commentsなどが掲載されているGitHub上のWikiです。
パッケージドキュメント
標準パッケージやサードパーティ製のパッケージのドキュメントが見れるサイトです。検索もできます。
入門
プログラミング言語Go完全入門
筆者が作っている巨大なGoの入門資料です。なぜGoが作られたのか、から最新のジェネリクスの情報、静的解析まで扱っています。
Gopher道場
Goを体系的に学べる場です。10時間くらいある動画教材(自習室から入手可)もあります。
Go の最初の手順
Microsoftが公開している以下の内容が掲載された入門資料です。
- Go の使用を開始する
- Go でのパッケージ、変数、関数の使用方法を理解する
- Go で制御フローを使用する
- Go のデータ型、構造体、配列、スライス、マップを使用する
- Go でのエラー処理とログ記録を実装する
- Go でメソッドとインターフェイスを使用する
- Go でプログラムを作成してテストする
Goとは?特徴や仕事に使うことを目指すための勉強法などを解説
これからGoを始める方向けの記事です。
これからはじめるGo - tenntenn Conference 2022(資料 / 動画)
Goをこれから始めるための動画資料です。
よいコードを書くために
Go Proverbs
Rob Pike氏のGoの格言をまとめたサイトです。
Go Code Review Comments(日本語訳)
Goの良いコードが書かれたページです。
コミュニティ
Slack-Gophers
Slackのコミュニティです。#japan
や#tokyo
には日本語話者がいるので、日本語で質問しやすい。この他にも分野や地域ごとにチャンネルがあります。
書籍
Books for Gophers - Go Conference 2022 Spring
書籍の情報をまとめたものです。
エディタ/IDE
普段使ってるエディタやIDEのGoプラグインを使うと良いでしょう。特にない場合はVisual Studio Codeをオススメします。
Visual Studio Code
Goの公式でプラグインが用意されています。インストールも簡単で.goファイルを開くとプラグインのインストールが促されます。
よくある質問
〇〇が無いのはなぜ?などの疑問を持った場合は、公式のFAQを参考にすると良いでしょう。
〇〇envは必要か?
Goでは○○envが不要になった理由(バージョンアップを怠ると損する理由)を読んでください。現在のGoのバージョン(Go1.18)では端的に言うとほとんどの場合不要です。
Goは、ツールチェイン(コンパイルなど)を公式サイトからダウンロードし、お好きなエディタ(オススメはVisual Studio Code)を用意するだけで始められます。Gitも必要になることもありますが、他は必要になった時点でインストールすれば十分です。
環境変数の設定
不要です。GOPATHやGOROOTに言及している記事は基本的に古いことが多いです。無くなった訳ではありませんが、ほとんど設定することはなくなりました。
環境変数の意味を理解せずに設定するのはどちらにせよ危ないので、ほとんどありませんが、必要になったときに設定しましょう。
Goを始める際におまじない的に設定するものはありません。
プロジェクトの作り方
最初にgo mod init
コマンドを実行しましょう。Goはモジュールという単位でプロジェクトを管理します。
以下のように、モジュールパスを指定してコマンドを実行します。$
はターミナルのプロンプトを表しているので入力は不要です。
$ go mod init github.com/tenntenn/mymodule
github.com/tenntenn/mymodule
の部分がモジュールパスです。サンプルコードや殴り書きのコード以外はGitHubなどのリポジトリのパスにしておきましょう。
go mod init
コマンドを実行したら、go.mod
ファイルができます。モジュールの情報や依存するモジュールのバージョンなどが記載されます。
あとはコードを書いてgo build
コマンドまたはgo run
コマンドでコンパイルして実行しましょう。
標準パッケージ以外を使ってる場合は、ソースコードにimport
宣言を書き、go mod tidy
コマンドを実行すると、go.mod
ファイルに依存関係が追加されます。
標準パッケージ以外を使っている場合、go.sum
ファイルが作成されます。これはチェクサムの情報が記録されたものです。go.mod
ファイルや他のソースコードと共にコミットしておきましょう。
ディレクトリ構成
Standard Go Project Layoutを参照している記事を多く見かけますが、これは標準ではありません。Goチームのメンバーから指摘も入っています。
学習中はパッケージ(ディレクトリ)はディレクトリ1つのシンプルな構成で始めると良いと思います。コマンドラインツールであれば、次のような構成をよく見かけます。
.
├── go.mod
├── internal
│ └── a.go
└── main.go
ライブラリとしての機能がメインの場合は以下のような構成にするのも見かけます。cmd
ディレクトリ以下にツール名をつけたディレクトリを置き、その中にmain.go
を置きます。
.
├── a.go
├── cmd
│ └── mytool
│ └── main.go
└── go.mod
APIサーバやWebアプリケーションの場合はもう少し複雑な構成になると思います。それなりの規模で公開されているものであれば、pkg.go.devのソースコードも参考になります。
作るものや開発チームが変われば適切なディレクトリ構成も変わります。適切なディレクトリ構成もプロダクトのフェーズによって変わる場合もあるでしょう。チームや企業内で模索するものであり、言語で標準が決まっているものではないのかなと考えています。
とはいえ、パッケージ構成を考える際のポイントとしては、パッケージの利用者の立場になって考えることです。「Goに入ってはGoに従え」にあるように、命名は与えられたコンテキスト(文脈)の中で分かりやすいものにすると良いとされています。パッケージ構成はこのコンテキストを作ることになるため、パッケージ名が長くなり、コンテキストがうまく組み立てられていない場合はパッケージ構成が良くないといえるでしょう。