goコマンド

Overview

Examples:

# ビルド
go build

# パッケージ取得
go get

# モジュール管理
go mod

# 実行
go run

# テスト
go test

# 静的解析によって疑わしい問題を報告
go vet

# バージョン表示
go version

# ヘルプ
go help [command]

参考:

環境変数

VariableValuesDescription
GO111MODULEauto, on, off「module-aware mode」が有効かどうか。デフォルトではgo.modの有無で判定される
GOMOD(右記)go.modの絶対パス。go.modがなければos.DevNullの値。「module-aware mode」が無効なら、空文字列

Module

https://golang.org/cmd/go/#hdr-Module_support

「module-aware mode」については、上記の環境変数およびgo.modファイルの有無で判定される。
これにより、 go get などの挙動が変わる。

参考:

build flags

https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies

buildのためのオプションだが、 build, clean, get, install, list, run, test コマンドで共有される。

フラグ機能
-vコンパイル時にパッケージ名を表示
-xコマンドを表示
-tags tag1,tag2,...build tags. See pkg (stdlib) > go/build

コマンド

build

https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies

Examples:

go build
go build -o path/to/out

get

Examples:

go get <package>

# ログメッセージを表示
go get -v <package>

2020-06-08現在、(Moduleが登場したGo 1.11以降で) go get には2つのモードがある:

後者についてはweb上ではヘルプを見つけられていないが、 go help module-get を実行するか、「module-aware mode」で go help get を実行すると、ヘルプが見られる。
逆に、「module-aware mode」を無効にして go help get を実行するか、 go help gopath-get を実行すると、legacy GOPATH modeの go get のヘルプが見られる。

実行例:

$ go help gopath-get
The 'go get' command changes behavior depending on whether the
go command is running in module-aware mode or legacy GOPATH mode.
This help text, accessible as 'go help gopath-get' even in module-aware mode,
describes 'go get' as it operates in legacy GOPATH mode.

Usage: go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]

Get downloads the packages named by the import paths, along with their
dependencies. It then installs the named packages, like 'go install'.
:
(以下略)

$ go help module-get
The 'go get' command changes behavior depending on whether the
go command is running in module-aware mode or legacy GOPATH mode.
This help text, accessible as 'go help module-get' even in legacy GOPATH mode,
describes 'go get' as it operates in module-aware mode.

Usage: go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages]

Get resolves and adds dependencies to the current development module
and then builds and installs them.
:
(以下略)

gopath-get

GOPATHの下にパッケージをダウンロードし、インストールする。
パッケージのソースは GOPATH/src/<import-path> に展開される。

常に最新版が取得され、複数バージョンを混在させられないという問題があった。

module-get

(go.modに記された)現在開発中のモジュールに対し依存モジュールを解決して、ビルドとインストールを行う。

Spec:

  • バージョン指定でインストールできる。例: go get golang.org/x/[email protected]
  • go.modがあるディレクトリで実行すると、 go.mod, go.sum が更新され、取得したモジュールが依存に追加される
  • moduleは GOPATH/pkg/mod に取得され、バイナリは GOPATH/bin にインストールされる
  • モジュールの外で GO111MODULE=on を指定して実行することもできる

取得パスについては go help modules に記載があった:

In module-aware mode, GOPATH no longer defines the meaning of imports during a build, but it still stores downloaded dependencies (in GOPATH/pkg/mod) and installed commands (in GOPATH/bin, unless GOBIN is set).

とのこと。

test

https://golang.org/cmd/go/#hdr-Test_packages

# Syntax
go test [build/test flags] [packages] [build/test flags & test binary flags]

# 正規表現にマッチする一部のテストのみ実施
## Fooを含むテスト関数名にマッチ
go test -v ./... -run Foo

関連項目: