Smartphonemoriyoshiの日記この広告は、90日以上更新していないブログに表示しています。2018-03-19nilが欲しいからと言ってむやみにポインタを使うとひどい目にあう話スマートフォンアプリ側の実装担当として少し関わっているあるβ版のサービスで、奇妙だが比較的クリティカルな問題が発生していた。それもメッセージが関係ない人間に届くというものであった。なんとなくその問題を担当することになったが、常に状況が再現するわけではなく、他の仕事もあったので、問題への見当を付けられないまましばらく過ごしてしまった。そのメッセージを送信する部分はサーバサイドのコードで、Goで書かれていた。そのコードのエッセンスを抽出すると、以下のようになる。値はループの中で都度作られているので一見よさそうに思えるのだが、実行してみると、時として次のような結果になるのだ。UserId=2(Goroutineのyieldするタイミングによって結果が変わるので、期待値通りになることもある。UserId=1のように、タイトルに含まれるユーザ名とユーザのidが一致することである。メンバへのポインタが与えられ続けるためだ。「ループ外」と書くと、「userはfor文より外のスコープで扱えないわけだからループの中だろ」というツッコミが入りそうだが、実際のスコープの内実はこうだ。囲まれていない範囲なので意識しづらいのだ。このコードは取り急ぎ以下のように書き換えればよい。Playground書き換えればよい、とは書いたものの、こういうコードにすべきじゃないというのが正直なところだろうか。先日このような駄エントリを書いた。...2010-07-14ストアドを使って、Webスクレイピングをしよう!こんにちは、SQLを愛してやまないmoriyoshiです。