Go

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

More than 1 year has passed since last update.


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 でよしなにしてくれるので便利ですね。