Goフォーマッター
Go のソースコードを整形・整理します — 波括弧と括弧の深さに基づくタブインデント、Go の規約どおりの開き波括弧の同一行配置、曖昧さのない演算子とカンマの空白調整、複合リテラルのコロンの間隔、そして標準ライブラリとサードパーティの import の任意の並べ替えに対応。バッククォートで囲まれた生文字列とコメントはバイト単位で変更しません。
入力
整形オプション
出力
このツールを使う他の方法
REST API
curl -X POST https://api.iotools.cloud/v1/tool/go-formatter \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"goInput": "package main\n\nimport (\n\"fmt\"\n\"os\"\n\"github.com/sp…",
"sortImports": "true"
}'ご自身のアカウントのキーに差し替えてください。ツールのフィールドがそのままリクエストボディになります——ラッパーはありません。
AIエージェントに依頼する
Use the IOTools `go-formatter` tool (Go Formatter) on this input:
YOUR_INPUT_HEREIOTools MCPサーバーに接続された任意のエージェントにこれを貼り付け、入力内容を追加してください。
埋め込みウィジェット
<iframe
src="https://iotools.cloud/embed/go-formatter/"
width="100%" height="520" frameborder="0" scrolling="no" loading="lazy"
title="Goフォーマッター — iotools.cloud"
sandbox="allow-scripts allow-forms allow-same-origin allow-downloads allow-popups allow-popups-to-escape-sandbox"
allow="clipboard-write"
style="width:100%;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden"></iframe>
<script src="https://iotools.cloud/embed.js" async></script>ご自身のページに貼り付けるだけ——無料、キー不要、リンクを掲載するだけです。
| API/MCP 1回あたりの費用 | 5クレジットから |
|---|---|
| クレジットが足りませんか? | 料金を見る |
次の方法でも利用可能
ガイド
雑に書かれた Go のコードを貼り付けるだけで、gofmt の慣習に沿ったきれいなソースコードをブラウザ上ですぐに取得できます。Go フォーマッターはタブでインデントを整え、各開き波括弧を、それを持つ if/for/func/struct と同じ行に移動し、演算子やカンマ周りの空白を整理します。さらに import を標準ライブラリとサードパーティの 2 グループに並べ替えてまとめることもでき、バッククォートで囲まれた生文字列 `backtick` やコメントは一切変更しません。
なぜタブなのか、そして波括弧が動かない理由
Go の書式には、スタイルの好みではなく言語自体の決まりごとが 2 つあります。インデントは常にタブで、スペースではありません。gofmt がスペースの選択肢を持たないのと同じく、このツールにもスペースのオプションはありません。そして開き波括弧はそれを持つキーワードと同じ行に置かれます。Go は行末で自動的にセミコロンを挿入するため、行にぽつんと置かれた { は見た目だけでなく、コードの意味を静かに変えてしまうことがあるからです。このツールは、迷い込んだ波括弧を常に前の行へ戻します。
使い方
Go のソースを貼り付けるか、.go ファイルをアップロードしてください。import を並べ替えてグループ化を有効にすると、import ブロックが標準ライブラリのグループとサードパーティのグループに分けられ、それぞれアルファベット順に並べ替えられます。結果はコピーするか、formatted.go としてダウンロードできます。整形は入力中やオプション変更時に自動で実行されます。
正規化される内容
- インデント — 波括弧と括弧のネストの深さに応じてタブを使用します。
case/defaultは、対応するswitchの本体より 1 段階浅く配置されます。 - 波括弧の位置 — 単独の
{の行は、必ず前の行に結合されます。 - 演算子の空白 — 曖昧さのない二項演算子は、前後に 1 つずつ空白が入ります。対象は
:=、==、!=、<=、>=、&&、||、<<、>>、&^、=と、複合代入の形式です。 - カンマとセミコロンの空白 — 直前には空白なし、直後に 1 つの空白。
- 複合リテラルのコロン —
User{Name:"x"}はUser{Name: "x"}になりますが、スライスや添字のコロンは詰めたまま(s[1:3])です。これは推測ではなく本当の区別で、ツールはファイル全体にわたって最も内側で開いている括弧の種類を追跡し、それが{の場合にのみコロンの後ろに空白を入れ、[の場合は入れません。 struct{、interface{、括弧のない文の見出し(if x > 0{、for i := range xs{)は、波括弧の前に空白が入ります。func f() error{のような関数シグネチャも同様です。- import の並べ替え(任意) — 標準ライブラリとサードパーティの各グループをアルファベット順に並べ、空行で区切ります。
- 空行 — 連続する空行は最大 1 行に縮め、
{の直後や}の直前には入れず、トップレベルのfunc/type/var/constの直前には必ず 1 行入れます。
あえて変更しないもの
- 単項と二項の
+、-、*、&、およびチャネル演算子<-(送信では二項、受信では詰まった単項の接頭辞)。これらを区別するには本物の構文解析が必要なため、元の空白はそのまま残ります。 - 行の折り返し — 与えられた行数より増減させるような再配置は一切行いません。
- 文字列の内部。 生文字列
`...`は、改行、インデント、波括弧、コロンを含めて**バイト単位で**そのまま保持されます。SQL やテンプレートによく使われるためです。構造体タグ(`json:"name"`)の内部も変更しません。 - コメント。
//と/* */のコメントは、複数行のブロックコメントを含めてそのままコピーされます。
gofmt と同じですか?
いいえ。これは依存関係のないテキストフォーマッターで、ブラウザ内で完全に動作します。本物の Go パーサーではありません。gofmt は完全な構文木を構築しますが、このツールはトークン化されたテキストを扱います。その結果、Go をインストールしなくても、正しいタブ、正しい波括弧の位置、適切な空白が得られます。
コードは非公開ですか?
完全に非公開です。すべての整形はブラウザ内でローカルに行われ、ソースがサーバーに送信されたり、記録されたり、保存されたりすることはありません。