Go言語の学習を始める前に知っておくべき基本情報(個人メモ)

参考リンク色々

The Go Programming Language
Golang公式トップ

Packages – The Go Programming Language
Golangパッケージの検索が可能です。

Documentation – The Go Programming Language
Golangドキュメントのトップページ。開発に役立つリンクがあります。

The Go Playground
Webブラウザ上でGolangのコードを試せます

A Tour of Go 
Webブラウザ上でGolangの基本を学べます。 日本語版もあります。

Effective Go – The Go Programming Language
Golang特有の表現や慣習的な使い方がサンプル付きで記載されています。

コミュニティ

Slack Community For Gophers
GophersのためのSlackコミュニティ。#japanチャンネルでは日本人の方が多くいて日本語でやりとりできます。

開発ツール

VSCode
無料です。Goエクステンション追加で快適にGolangを開発できます。

GoLand
GolangのIDE。有料ですが、補完機能が強力で生産性を求めるなら利用すべきです。

GOROOT

  • 基本設定しなくて良い
  • Go言語がインストールされている場所
  • インストール環境によって場所は異なる
  • Macであれば/usr/local/go
  • goのバイナリファイルは$GOROOT/bin/go

GOPATH

  • Go言語のワークスペース
  • Goの古いバージョンでは設定する必要があった
  • デフォルト(設定されていない場合)は$HOME/goになる
  • 自身のプログラムは$GOPATH/src/github.com/user/repoのように作成するのが通例
  • 外部パッケージがインストールされる場所でもある

参考:https://golang.org/doc/gopath_code.html#GOPATH

$GOPATHディレクトリにはsrc,pkg,binの3つのディレクトリがあります。

  • src にはソースコードを保存します(例えば:.go .c .h .s等)
  • pkg にはコンパイル後に生成されるファイル(例えば:.a)
  • bin にはコンパイル後に生成される実行可能ファイル(このまま $PATH 変数に加えてもかまいません。もしいくつもgopathがある場合は、${GOPATH//://bin:}/binを使って全てのbinディレクトリを追加してください)

go get

外部パッケージをインストールするコマンドです。実行するとソースコードを$GOPATH/go/srcダウンロードします。この時に依存感関係のあるパッケージが一緒にダウンロードされます。また、$GOPATH/go/binに実行ファイルが生成されます。

オプションuをつけて依存関係とそのすべての依存関係を最新バージョンにアップグレードするインストールする利用方法が多いです。

例:

$ go get -u github.com/cosmtrek/air

Go Modules

インポートするパッケージのバージョンを管理してくれます。
参考:https://github.com/golang/go/wiki/Modules

チームで開発する場合は設定しておくと安心です。

使い方

$ cd ~/go/src/github.com/name/app
$ go mod init

go.modファイルが作成されます。

go.mod:

module github.com/selegee/app2

go 1.15

ビルドすると依存パッケージのバージョンがgo.modファイルに追記されます。

go.mod:

go 1.15

require (
        github.com/labstack/echo v3.3.10+incompatible
        github.com/labstack/gommon v0.3.0 // indirect
        golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect
        gorm.io/driver/mysql v1.0.3
        gorm.io/gorm v1.20.5
)

go.sumファイルも作成されます。

go.sumは依存モジュールのチェックサムを管理します。

  • go.sumは特定のモジュールバージョンのコンテンツの予想される暗号チェックサムが含まれています。
  • 誰かがリポジトリのクローンを作成し、goコマンドを使用して依存関係をダウンロードした場合、ダウンロードした依存関係のコピーとの対応するエントリの間に不一致があると、エラーが発生します。

参考: https://syfm.hatenablog.com/entry/2019/08/10/170730

ホットリロード

Go言語にはデフォルトでホットリロードの機能はありません。

Go言語を開発する場合はホットリロードの外部パッケージをインストールをしておくと便利です。

airを用いたホットリロードの設定方法は以下に記載しています。

【Go言語】Airでサクッとホットリロードする方法