【Golang】goimportsでプロジェクト配下のimport文すべてをパッケージ種類別に整形する
TL;DR
下記コマンドで、カレントディレクトリ配下のすべての .go
ファイルの import 文を整形してくれる。
$ find . -print | grep --regex '.*\.go' | xargs goimports -w -local "github.com/your/package"
goimports
の -w
オプションでファイルを直接書き換える。
また -local <string>
は指定した string
を prefix にもつパッケージの整形済み import 文の上部に、他の整形済み import 文が置かれる。
すなわち、string
が prefix の import 文のかたまりが最後にくるようになる。
よって、import 文整形順は 標準パッケージ
-> Publicパッケージ
-> 自パッケージ
の順となる。
あとは、find . -print | grep --regex '.*\.go'
で引っ掛けた .go
ファイル全てに上記 import 整形を適用する。
example
before
import ( "fmt" "github.com/rennnosuke/gih/domain/model/entity" "github.com/rennnosuke/gih/domain/service/git/issue" "github.com/urfave/cli/v2" "regexp" "strconv" "unicode/utf8" )
after
import ( // 標準パッケージ "fmt" "regexp" "strconv" "unicode/utf8" // Publicパッケージ "github.com/urfave/cli/v2" // 自パッケージ "github.com/rennnosuke/gih/domain/model/entity" "github.com/rennnosuke/gih/domain/service/git/issue" )
参考 : goimports
Go は標準でソースの import 文を整形するツール goimports
を提供している。
goimports
を Go ソースファイルに実行することで、ソースをコンパイルするのに必要なパッケージの import 文を自動挿入したり、インデントを追加したり、不要な import 文を削除してくれる。
before
package main func main() { s1 := "Hello" s2 := "goimports." s := strings.join(s1, s2, ",") fmt.Println(s) }
$ goimports -w main.go
after
package main import ( "fmt" "strings" ) func main() { s1 := "Hello" s2 := "goimports." s := strings.Join(s1, s2, ",") fmt.Println(s) }