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) }