Compiler Explorerを使ってアセンブリコードを確認しよう。

最適化をするにはある程度アセンブラの知識があると便利ですが、覚えるのがちょっと大変です。 PCのx86(x64)だけに絞っても非常に命令数が多いし複雑です。 コンパイル結果をアセンブル出力しても、見たい物以外がごちゃごちゃあって最初は探すのが大変です。 ソースとアセンブリのどことどこが対応しているのかの把握も大変です。 そこでこのリアルタイムでアセンブリを出力してくれるこのCompile…

続きを読む

Goでos.Exitを呼ぶと同じ関数内のdeferが実行されない。

Go
os.Exit()を呼ぶと同じ関数内のdeferが実行されないという情報を発見。 panicなら納得だけoExitでもdefer実行されない。 deferステートメントは関数がリターンする直前に呼び出されるという仕様から考えれば、そりゃそうなるか。 対処方法はExit呼び出す関数ではdeferせずに、別の関数を呼び出した中でdeferするようにすればいい。 func main() {…

続きを読む

Goのflagパッケージを使ってコマンドライン引数でフラグを扱うの続き

前回の続きでflagパッケージについて書きます。 Usage 間違ったフラグを渡したときなどにUsageが表示されますが、flag.Usageに関数を入れることでカスタマイズできます。 デフォルトだと以下のようになっています。 var Usage = func() { fmt.Fprintf(CommandLine.Output(), "Usage of %s:\n", os.A…

続きを読む

最近のトラックバック