# Goをインストールする

Goの公式インストール手順は、[こちら](https://golang.org/doc/install)から入手できます。

## Go 環境

### Go Modules

Go 1.11から[Modules](https://github.com/golang/go/wiki/Modules)が導入されました。 この方法は Go 1.16 以降のデフォルトのビルドモードなので、`GOPATH` の使用は推奨されません。

モジュールは、依存関係管理、バージョン選択、再現性のあるビルドに関連する問題を解決することを目的としており、ユーザは `GOPATH` の外で Go コードを実行することもできます。

モジュールの使用方法は非常に簡単です。`GOPATH`外の任意のディレクトリをプロジェクトのルートとして選択し、`go mod init`コマンドで新しいモジュールを作成します。

ファイル `go.mod`が生成され、モジュールのパス、Go のバージョン、依存関係の要件が含まれています。

`<modulepath>`が指定されていない場合、`go mod init`はディレクトリ構造からモジュールのパスを推測しようとしますが、引数を与えることでそれを上書きすることもできます。

```bash
mkdir my-project
cd my-project
go mod init <modulepath>
```

`go.mod`ファイルは次のようになります。

```
module cmd

go 1.16
```

組み込みのドキュメントには、利用可能なすべての`go mod`コマンドの概要が記載されています。

```bash
go help mod
go help mod init
```

## Go リンター

デフォルトのリンターに対する改良は、[GolangCI-Lint](https://golangci-lint.run)を使用して構成できます。

以下のようにインストールすることができます。

```bash
brew install golangci/tap/golangci-lint
```

## リファクタリングとあなたのツーリング

このサイトでは、リファクタリングの重要性を重視しています。

あなたのツールは、より大きなリファクタリングを自信を持って行うのに役立ちます。

エディタを使いこなせば、簡単なキーの組み合わせで以下のことができるようになるはずです。

* **変数を抽出する/インライン変数**。魔法の値を取得して名前を付けることができるので、コードを素早くシンプルにすることができます。
* **メソッド/関数を抽出する**。コードの一部を取り出して、関数/メソッドを抽出できることが重要です。
* **リネーム**。ファイル間でシンボルの名前を自信を持って変更できるようになるはずです。
* **Go fmt**. Goには、`go fmt`と呼ばれるオピニオン付きフォーマッタがあります。エディタはファイルを保存するたびにこれを実行しなければなりません。
* **テストの実行**。上記のいずれかを実行して、リファクタリングが何も壊れていないことを確認するために、すぐにテストを再実行できるようにすべきであることは言うまでもありません。

さらに、あなたのコードで作業するのを助けるために、あなたができるようにする必要があります。

* **関数のシグネチャを表示** - Goの関数の呼び出し方がわからなくなってはいけません。IDEは、関数のドキュメント、パラメータ、戻り値を記述しなければなりません。
* **関数の定義を表示** - 関数が何をするのかわからない場合は、ソースコードを参照して自分で考えてみてください。
* **シンボルの使用法を見る** - 呼び出された関数のコンテキストを見ることができると、リファクタリングを行う際の意思決定プロセスに役立ちます。

ツールを使いこなせば、コードに集中でき、コンテキストの切り替えを減らすことができます。

## まとめ

この時点で、Goがインストールされていて、エディタが利用可能で、基本的なツールがいくつか用意されているはずです。Goには、サードパーティ製品の非常に大きなエコシステムがあります。ここでは、便利なコンポーネントをいくつか紹介します。

<https://awesome-go.com>を参照してください。
