0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

goimports活用方法まとめ

Posted at

皆さんはgoのコードを書いていてimport周りや依存の整理に苦戦したことはありませんか?
そんなときはgoimportsが役に立ちます!

1. まず、goimports とはなにか

⚪︎gofmt + import 管理 ができる

→フォーマットに加え、未使用importを削除・不足を追加 などを自動でやってくれる!

⚪︎1コマンドで全て解決 できる

goimports -w . で前 .go ファイルに対して上書き整形してくれる!

さらに、 golangci-lint と併用すると フォーマット/静的解析/複雑度 を一気に管理できる(こちらは別で解説するかも)

→つまり、goの全ファイルのimport周りの整理を自動でしてくれるのがgoimiports!


2. 公式ルール:3 グループ & アルファベット順

こんな感じに整えてくれます!

import (
    // ① 標準ライブラリ
    "context"
    "fmt"

    // ② サードパーティ
    "github.com/gin-gonic/gin"

    // ③ モジュール内(自作)
    "word_app/backend/src/utils/contextutil"
)

→ルールとしてはこんな感じ

  • グループ間を 1 行空ける
  • 各グループ内は ASCII 昇順
  • goimports が自動で並べ替えてくれる

3. 使い分け

確認のみする(diff -u` | CI をつけると差分チェック)

goimports ./...

自動で修正して上書き保存までする

goimports -w ./...

特定のファイルのみ確認する場合

goimports < file.go


4. VS Code 内で動かす

  1. go.toolsEnvVarsGOFLAGS: -tags=tools (必要なら)
  2. Format On Save を有効
  3. goplsgoimports を内部呼び出し → 保存するだけで自動で整形完了

5. CI (github actions)で使ってみる

- name: Check goimports
  run: |
    set -e
    diff=$(go run golang.org/x/tools/cmd/goimports@latest -d ./...)
    if [ -n "$diff" ]; then
      echo "$diff"
      echo "::error ::goimports violations found"
      exit 1
    fi
  • -d は差分をパッチ形式で出力し、ファイルは変更しない

  • golangci-lint を使う場合は

    linters:
      enable: [goimports, gofmt]
    

6. 出てくるエラーメッセージについて

File is not properly formatted

→インポート順・グループ違反、空行不足 が原因
goimports -w ./file.goで修正

goimports: cannot find module

go.modにない
go get <pkg> で追加

build constraints exclude all Go files

→タグが合わず除外
goimports -tags prodなどで解決


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?