Go言語のdeferの挙動?
TwitterやGistのURLをコピペするだけで記事に埋め込めるんだね。便利!
Go言語のdeferステートメント、呼ばれた時点でポインタが有効であれば、ポインタ断ち切ったあとも問題なく実行されるのなんか気持ち悪い。GCだからこそできる技なのか https://t.co/0Hg8BQJXUp
— なゆ (@nayuneko) 2016年5月24日
QiitaにGo言語のエラーハンドリングの記事を投稿するために色々試していた時に発見したなんか気になってしまった挙動。
検証バージョンはGo1.6.2
Piyo= piyopiyo Fuga: piyopiyo Piyo= hogera Fuga: hogera end Fuga: hogera
構造体のポインタ変数mにnilに設定してdeferで遅延指定されたm.Fuga()関数の呼び出しに成功するのがちと気持ち悪い。しかもちゃんと構造体変数Piyoの中身書き変わって出力されるし。そもそも変数にnilを代入したところで即時GCされるわけでもないだろうし、こんなことするプログラム書く方がアホなんでしょうけど。
動作原理とかわかれば納得できるんだろうけど、なんというか喉の奥に小骨が刺さっている感じ。