はじめに
前回は Go 言語の概要を書きましたが、今回は go
コマンドに関してまとめておきたいと思います。
- Go言語基礎 その1 Go言語入門
- Go言語基礎 その2 Go言語の開発環境と go コマンド
- Go言語基礎 その3 Go言語の基本構文1 (コメント, 型, 変数, 定数, 演算子)
- Go言語基礎 その4 Go言語の基本構文2 (関数, init, 制御構文)
- Go言語基礎 その5 Go言語の基本構文3 (配列, interface, slice, map, 型アサーション, Defined type, Type alias)
- Go言語基礎 その6 Go言語の基本構文4 (ポインタ, 構造体, メソッド, タグ, インターフェイス)
- Go言語基礎 その7 Go言語の基本構文5 (可視性, スコープ, goto, defer, panic, recover, goroutine, channel)
準備
- Go 言語の公式サイトからインストール先の OS 毎の手順に沿ってインストールを行う。
- インストール後、コマンドプロンプト(Mac ならターミナル、Windows ならコマンドプロンプト)など CLI から
go
コマンドを実行できるか確認する
$ go version
go version go1.17.6 darwin/amd64
goenv を使用すると複数の Go のバージョンを管理できます。
go コマンドに関して
go 言語で開発する際には必ず使用するこの go
コマンドに関してざっくりと要点をまとめておきたいと思います。
いろいろな go
コマンドがあるが、この中から(個人的に)よく使用するものを紹介する
go help
go version
go env
go build
go run
go fmt
go install
go mod
go test
go clean
go doc
go get
go help
go help
や go help <command>
で ヘルプを見れる
$ go help
Go is a tool for managing Go source code.
Usage:
go <command> [arguments]
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
Use "go help <command>" for more information about a command.
Additional help topics:
buildconstraint build constraints
buildmode build modes
c calling between Go and C
cache build and test caching
environment environment variables
filetype file types
go.mod the go.mod file
gopath GOPATH environment variable
gopath-get legacy GOPATH go get
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
module-get module-aware go get
module-auth module authentication using go.sum
packages package lists and patterns
private configuration for downloading non-public code
testflag testing flags
testfunc testing functions
vcs controlling version control with GOVCS
Use "go help <topic>" for more information about that topic.
例) go clean
コマンドのヘルプ
$ go help clean
usage: go clean [clean flags] [build flags] [packages]
Clean removes object files from package source directories.
The go command builds most objects in a temporary directory,
so go clean is mainly concerned with object files left by other
tools or by manual invocations of go build.
If a package argument is given or the -i or -r flag is set,
clean removes the following files from each of the
source directories corresponding to the import paths:
_obj/ old object directory, left from Makefiles
_test/ old test directory, left from Makefiles
_testmain.go old gotest file, left from Makefiles
test.out old test log, left from Makefiles
build.out old test log, left from Makefiles
*.[568ao] object files, left from Makefiles
DIR(.exe) from go build
DIR.test(.exe) from go test -c
MAINFILE(.exe) from go build MAINFILE.go
*.so from SWIG
In the list, DIR represents the final path element of the
directory, and MAINFILE is the base name of any Go source
file in the directory that is not included when building
the package.
The -i flag causes clean to remove the corresponding installed
archive or binary (what 'go install' would create).
The -n flag causes clean to print the remove commands it would execute,
but not run them.
The -r flag causes clean to be applied recursively to all the
dependencies of the packages named by the import paths.
The -x flag causes clean to print remove commands as it executes them.
The -cache flag causes clean to remove the entire go build cache.
The -testcache flag causes clean to expire all test results in the
go build cache.
The -modcache flag causes clean to remove the entire module
download cache, including unpacked source code of versioned
dependencies.
For more about build flags, see 'go help build'.
For more about specifying packages, see 'go help packages'.
go version
go のバージョンを確認できる
$ go version
go version go1.17.6 darwin/amd64
go env
go に関連する環境変数の一覧を表示する。
よく使用するものは以下の環境変数。
GOROOT
Go の SDK のパスを設定。インストール時に設定されていることが多いため基本設定変更は不要。GOPATH
Go 言語のワークスペース。$GOPATH/src
配下に Go のソースコードを配置する。GOARCH
クロスコンパイル時に出力ターゲットのアーキテクチャを設定、デフォルトは開発環境の OSGOOS
クロスコンパイル時に出力ターゲットの OS を設定、デフォルトは開発環境の OSCGO_ENABLED
cgo を使用して C/C++言語のコードを呼び出す際に1
を設定して有効にするGO111MODULE
モジュール管理のモード(go mod
で後述)を指定、デフォルトは OFF(モジュール対応モードを使用)
$ go env
GO111MODULE=""
GOARCH="amd64"
:
:
:
GOPATH
は $HOME/go
配下に設定しておき、以下のようなディレクトリ構成にすることが好ましい
.
├── bin
├── pkg
└── src
└─┬─ github.com/owner
├── project-a
│ └── main.go
└── project-b
└── main.go
go build
- 対象の go のソースコードをコンパイルするためのコマンド
-o
で生成する実行ファイルの名前を指定できる
$ go build -o main main.go
go run
- コンパイル+実行までを一つのコマンドでできる便利コマンド
- 開発時に
go run main.go
のようにコマンド一発で起動したい場合によく使う - Docker のコンテナ内などで実行する際には
go build
でビルドしたバイナリを使用する
go fmt
go のソースコードを自動的に整形するためのコマンド
go install
- パッケージや実行ファイルをビルドした結果を既定の場所にインストールするためのもの。
- Go 製の CLI ツールをインストールするのによく使う。
$GOBIN
または$GOPATH/bin
に配置される。
下の例は [github.com/Songmu/gocredits]](https://github.com/Songmu/gocredits) をインストールする例です。
$ go install github.com/Songmu/gocredits/cmd/gocredits@latest
go: downloading github.com/Songmu/gocredits v0.2.0
インストール後は gocredits
と打つだけでパスが通っているので使えます。
$ gocredits -version
gocredits v0.2.0 (rev:HEAD)
go mod
- Go のモジュール管理を行うコマンド
- Go 言語では標準ライブラリ以外のパッケージを「モジュール(module)」として管理する
- 以前は GOPATH モード
GOPATH mode
が標準だったが、今はモジュール対応モードmodule-aware mode
が標準 - モジュール対応モードでは
go.mod
ファイルを使用してモジュールを管理する 公式仕様 - プロジェクトの作成時などは
go mod init
コマンドで初期化する go mod install
コマンドで 必要なモジュールをローカルのキャッシュに一括ダウンロードできる。go mod tidy
コマンドでいい感じにgo.mod
ファイルを更新してくれる(未使用だったり削除済みのモジュールを管理対象から自動で外す、自動で必要なモジュールをダウンロード)
$ go mod init
go: creating new go.mod: module github.com/owner/project_name
go: to add module requirements and sums:
go mod tidy
go test
go test
または go test <target_directory>
で 指定したパッケージ(=ディレクトリ内の)テストコードを実行できる
-v
詳細表示-cover
カバレッジを表示-run <regexp>
正規表現にマッチしたテスト関数のみ実行する-race
go clean
go build
や go test
の生成したファイルを削除するコマンド
_obj/ old object directory, left from Makefiles
_test/ old test directory, left from Makefiles
_testmain.go old gotest file, left from Makefiles
test.out old test log, left from Makefiles
build.out old test log, left from Makefiles
*.[568ao] object files, left from Makefiles
DIR(.exe) from go build
DIR.test(.exe) from go test -c
MAINFILE(.exe) from go build MAINFILE.go
*.so from SWIG
go doc
go のパッケージのドキュメントを参照するためのコマンド
ソースコードに記述されたコメントをそのままドキュメントとして利用する
go get
外部パッケージのダウンロードとインストールをまとめて実行するためのコマンド
go install
や go run
の機能拡張に伴い、非推奨になりつつあるオワコンコマンド
go get: installing executables with 'go get' in module mode is deprecated.
To adjust and download dependencies of the current module, use 'go get -d'.
To install using requirements of the current module, use 'go install'.
To install ignoring the current module, use 'go install' with a version,
like 'go install example.com/cmd@latest'.
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
参考にした本
おわりに
こんな感じでざっくりよく使う go
コマンドをまとめてみました。
次回は Go 言語の文法を復習したいと思います。