basyura's blog

あしたになったらほんきだす。

gofmt

Go にはソースコードをフォーマットする gofmt がある。

gofmt -w filename.go

とすると、統一された書式に書き換えてくれる。
例えば、以下のようにインデントも空白も適当に入れたソースでも、

package   main
import              "fmt"

func main() {
    msg :="hello world"
      fmt.Printf(  "%s and GO!\n" ,    msg  )
  list :=[]int{1,2,3,4,5}
    for v:= range list{
fmt.Println(v)
    }
}

gofmt を通すとキレイになる。

package main

import "fmt"

func main() {
    msg := "hello world"
    fmt.Printf("%s and GO!\n", msg)
    list := []int{1, 2, 3, 4, 5}
    for v := range list {
        fmt.Println(v)
    }
}

vimmer なので、もうひとひねり。vimrc に以下を記述。

command! GoFmt execute ':silent !gofmt -w %' | execute ':edit! %'

:GoFmt を実行すると gofmt コマンドで整形した後に開き直す。BufWritePost で発動すると幸せになれるかも。

追記

保存時に整形する設定

augroup MyGroup
  autocmd! MyGroup
  autocmd BufWritePost *.go :GoFmt
augroup END
command! GoFmt execute ':silent !gofmt -w %' | execute ':edit! %'