goimportsとはGo言語の準標準パッケージ(サブレポジトリ)であるGo Toolsに内包されている静的解析ツールです。
goimportsの機能は以下の通りです。
goimportsの機能
- 不要なパッケージのimportを削除
- 必要なパッケージのimportを追加
- gofmtのルールに沿ったコードのフォーマット
goimportsはパッケージのインポートを修正するだけでなく、Go言語の標準パッケージであるgofmtのルールでコードを修正します。1
そのため、goimportsはgofmtの上位互換ツールといえます。
今回はgoimportsの利用方法について紹介します。利用するGoのバージョンは1.16.3です。
下準備: 『$GOPATH/bin』をパスに追加する
goimports
コマンドを実行するためには$GOPATH/bin
をパスに追加する必要があるので、シェルの設定ファイルを修正しておきます。
### GOPATHの確認
$ go env | grep GOPATH
GOPATH="~/go"
.zshrc
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
# 重複パスを登録しない
typeset -U path PATH
goimportsのインストール
goimportsのバイナリファイル(実行ファイル)をインストールします。
$ go install golang.org/x/tools/cmd/goimports@latest
$GOPATH/bin
にgoimportsがインストールされていればOKです。
$ ls $GOPATH/bin
goimports
動作確認
以下のようなサンプルコードに対してgoimportsを実行してみます。
main.go
package main
import (
"fmt"
"os"
) // osはimport不要
func main() {
fmt.Println("goimports") // 本来はインデントが必要
}
### goimportsでmain.goのコードをフォーマットする
$ goimports -w main.go
# -w: 修正した内容で上書き
goimports
を実行すると、以下のようにimport文とコードのフォーマットが行われます。
import (
"fmt"
- "os"
) // osはimport不要
func main() {
- fmt.Println("goimports") // 本来はインデントが必要
+ fmt.Println("goimports") // 本来はインデントが必要
}
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!
- https://pkg.go.dev/golang.org/x/tools/cmd/goimports ↩