Go でコメントアウトせずに素早く複数行スキップさせる

Posted on
qiita Go

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

TL; DR

if false {} でスキップしたい箇所を囲む

本文

Go では宣言されてるのに使われてない変数があると、ビルド時に hoge declared and not used といった感じで怒られます。 Go 書いてる時、デバッグ目的で処理を飛ばそうと複数行コメントアウトしたくなる時があります。が、適当にやると変数の宣言だけが残って前述のように怒られることがあります。この場合は改めて宣言箇所だけコメントアウトすればビルドが通りますが、まあ面倒ですよね。

こういう時は、該当箇所を if false {} で囲ってやればよいです。見てわかるように、常に false なのでブロックの中は実行されません。

Example

元のコード

package main

import (
	"fmt"
)

func main() {
	hogeMessage := "hoge"
	fugaMessage := "fuga"
	piyoMessage := "piyo"
	hogehogeMessage := "hogehoge"

	fmt.Println(hogeMessage)
	fmt.Println(fugaMessage)
	fmt.Println(piyoMessage)
	fmt.Println(hogehogeMessage)
}
$ go run hoge.go
hoge
fuga
piyo
hogehoge

コメントアウトすると…

package main

import (
	"fmt"
)

func main() {
	hogeMessage := "hoge"
	fugaMessage := "fuga"
	piyoMessage := "piyo"
	hogehogeMessage := "hogehoge"

	fmt.Println(hogeMessage)
	// fmt.Println(fugaMessage)
	// fmt.Println(piyoMessage)
	fmt.Println(hogehogeMessage)
}
$ go run hoge.go
# command-line-arguments
./hoge.go:9: fugaMessage declared and not used
./hoge.go:10: piyoMessage declared and not used

`if false

package main

import (
	"fmt"
)

func main() {
	hogeMessage := "hoge"
	fugaMessage := "fuga"
	piyoMessage := "piyo"
	hogehogeMessage := "hogehoge"

	fmt.Println(hogeMessage)

	if false {
		fmt.Println(fugaMessage)
		fmt.Println(piyoMessage)
	}

	fmt.Println(hogehogeMessage)
}
$ go run hoge.go
hoge
hogehoge

同じようなことを他の言語でやろうとするとブロック内のインデント調整が面倒ですが、Go だと go fmt でよしなにしてくれるので便利ですね。