なゆめも

途切れない気持ちが私の道しるべ。

Go言語のdeferの挙動?

TwitterやGistのURLをコピペするだけで記事に埋め込めるんだね。便利!

QiitaにGo言語のエラーハンドリングの記事を投稿するために色々試していた時に発見したなんか気になってしまった挙動。

検証バージョンはGo1.6.2

Piyo= piyopiyo
Fuga: piyopiyo
Piyo= hogera
Fuga: hogera
end
Fuga: hogera

構造体のポインタ変数mにnilに設定してdeferで遅延指定されたm.Fuga()関数の呼び出しに成功するのがちと気持ち悪い。しかもちゃんと構造体変数Piyoの中身書き変わって出力されるし。そもそも変数にnilを代入したところで即時GCされるわけでもないだろうし、こんなことするプログラム書く方がアホなんでしょうけど。

動作原理とかわかれば納得できるんだろうけど、なんというか喉の奥に小骨が刺さっている感じ。