...

パッケージ format

import "go/format"
概要
目次

概要 ▾

format パッケージは,Go ソースの標準フォーマットを実装します。

Go ソースコードのフォーマットは時間とともに変化するので,一貫したフォーマットに依存するツールはこのパッケージを使う代わりに特定のバージョンの gofmt バイナリを実行するべきです。 そうすることで,フォーマットは安定し,ツールは gofmt が変わるたびに再コンパイルする必要がなくなります。

たとえば,このパッケージを直接使用する送信前チェックは,各開発者が使用する Go のバージョンによって動作が異なるため,チェックが本質的に脆弱になります。

func Node 1.1

func Node(dst io.Writer, fset *token.FileSet, node interface{}) error

Node は,正規の gofmt スタイルでノードをフォーマットし,結果を dst に書き込みます。

ノード型は *ast.File , *printer.CommentedNode , []ast.Decl , []st.Stmt ,または ast.Expr, ast.Decl, ast.Spec ,または ast.Stmt と代入互換性がある必要があります。 Node はノードを変更しません。 インポートは,部分的なソースファイルを表すノードに対してソートされません (たとえば,ノードが *ast.File でなかったり, *ast.File をラップしていない *printer.CommentedNode である場合など) 。

この関数は早く (結果全体が書き込まれる前に) 戻り,例えば誤った AST が原因でフォーマット設定エラーを戻すことがあります。

コード:

const expr = "(6+2*3)/4"

// parser.ParseExpr は引数を解析し,対応する ast.Node を返します。
node, err := parser.ParseExpr(expr)
if err != nil {
    log.Fatal(err)
}

// ノードのファイルセットを作成します。
// ノードは実際のソースファイルから来ていないので, fset は空になります。
fset := token.NewFileSet()

var buf bytes.Buffer
err = format.Node(&buf, fset, node)
if err != nil {
    log.Fatal(err)
}

fmt.Println(buf.String())

出力:

(6 + 2*3) / 4

func Source 1.1

func Source(src []byte) ([]byte, error)

ソースは src を正規の gofmt 形式でフォーマットし,結果または (I/O または構文) エラーを返します。 src は,構文的に正しい Go ソースファイル,または Go 宣言またはステートメントのリストであることが期待されています。

src が部分ソースファイルの場合, src の先頭と末尾のスペースが (src と同じ先頭と末尾のスペースを持つように) 結果に適用され,結果は src の最初の行と同じ量だけインデントされます。 コードを含みます。 インポートは部分ソースファイルに対してソートされません。