詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Go でコードを書く時のかゆいところに手が届く goquickfix というのを書いた

go rungo test でコードを試しながら書きながら……というフェーズでは、以下のような状況によく遭遇することと思います:

  • デバッグプリント用のコードを削除したら、"log" や "fmt" パッケージが不要になって imported and not used: "log" と言われた。まだ使うかもしれないのでいちいち消したくない。
  • 同様に、コードを整理したところ使っていない変数がでてきて i declared and not used と言われた。まだ使うかも(ry

出来上がりのコードの品質を高く保つには便利な機能ですが、試行錯誤をしている段階ではけっこうな障害になります。そこで goquickfix

go build が通らないコードに goquickfix をかければ、コードを書き換えて go build 可能にしてくれます:

goquickfix -w hoge.go

やっていることは簡単で、エラーを起こす識別子の登場を blank identifier _ で抑制するだけです。 例えば以下のようなコードは、

package main

import (
    "fmt"
    "log" // <- imported and not used: "log"
)

func main() {
    nums := []int{3, 1, 4, 1, 5}
    for i, n := range nums { // <- i declared and not used
        fmt.Println(n)
    }
}

goquickfix -w 後以下のようなコードになります。

package main

import (
    "fmt"
    _ "log" // <- インポート文は残すけど名前を使用しない
)

func main() {
    nums := []int{3, 1, 4, 1, 5}
    for i, n := range nums {
        fmt.Println(n)
        _ = i // <- i はここで登場するのでエラーにならない
    }
}

goimports を愛用している人には、インポート文の書き換えは不要かもしれませんね。

もちろんその場しのぎの対処で、最終的には消したいコードです。-revert オプションを与えることで、goquickfix によって導入されたと思しきコードを取り除きます(たぶんそうだろうというコードを修正するようになっているので、完全に戻るとは限りません):

goquickfix -revert -w hoge.go

シンプルかつ便利ですね。

どうぞご利用下さい。これは gore の副産物でした。

motemen/go-quickfix · GitHub

The Go Programming Language (Addison-Wesley Professional Computing Series)

The Go Programming Language (Addison-Wesley Professional Computing Series)

はてなで一緒に働きませんか?