MONTH

2024年6月

  • 2024年6月30日
  • 2024年7月3日

【Javascript】画面遷移時に、ブラウザに送信処理を予約してデータ送信する

PC・スマホの両方で、画面遷移時にユーザーの画面操作ログを送信したい。 加えて、確実に送信処理が実行されるようにしたいとします。 PCのみの場合は、unload、beforeunload イベントの場合に送信すればいいですが、モバイルでは、ブラウザーは unload、beforeunload、pag […]

  • 2024年6月30日
  • 2024年7月3日

Goのnet/httpでサーバーのハンドラー処理を作ってみる

net/httpパッケージを使って、サーバーのハンドラー処理を書いてみた。 handler1、handler2、handler3、handler4、どれも書き方は若干違うが、最終的にhttp.Handle()が呼び出され、ルーティングが登録されるため同義となる。 http.Handle()の第2引数 […]

  • 2024年6月30日
  • 2024年7月3日

Goのスライスの挙動

Goのスライスの挙動について調べたので書く。 容量を超える要素を追加したときは、元の容量を2倍したスライスが作られる。 元のスライスをコピーして新しいスライスが作られるため、メモリ上のアドレスが異なる。 つまり、元のスライスの分だけ、余分にメモリを消費するということ。 ということは、下記のような場合 […]

  • 2024年6月29日
  • 2024年7月3日

早期リターンして認知負荷を下げよう

if ~ elseif ~ elseなどで複数条件を処理しているコードを、エンジニアなら誰しも一度は見たことがあると思います。 その条件が何層もネストしているコードにもお目にかかったこともあるでしょう。 今回はそういうコードを、早期リターンを使って読みやすくしてみたいと思います。 早期リターン実施前 […]

  • 2024年6月29日
  • 2024年7月3日

GoでJSONデータをメモリ効率よく処理する

GoでJSONを扱う場合、”encoding/json”パッケージを使います。 よく使うのは、MarshalとUnmarshalの2つですが、今回は以下のメソッドを使用していきます。 このようにNewEncoder、NewDecoderを使用すると、MarshalやUnmar […]

  • 2024年6月29日
  • 2024年6月29日

Goで値渡しをするかポインタ渡しをするかの基準

構造体のフィールドの値を変更する必要があるなら、構造体のポインタで渡す。 そうでないなら、値で渡す。 値で渡した場合は、構造体のコピーが作られるため、元のデータが変更されない。 なので、基本的にポインタで渡しておき、フィールドのデータを書き換える必要がない場合や明確に元のデータを書き換えたくない場合 […]

  • 2024年6月29日
  • 2024年7月3日

Goのerrors.Isとerrors.Asの使いどころ

errors.Is エラーチェーンの中で、特定のエラーが存在するか確認する場合に使う。 以下の場合だと、queryDatabase関数内でErrDatabaseエラーが発生していて、それをmain関数内で存在しているか確認している。 もしqueryDatabase関数でエラーがない場合は、conve […]

  • 2024年6月29日
  • 2024年7月3日

Goのエラーチェーンでエラーが起こった流れを把握する

Goにはスタックトレース機構がないので、どういう流れで処理が行われたのかが把握できない。 そのため、一番初めの呼び出し元にエラーをラップして戻す方法で、エラーの流れを把握する。 このようにすると、どういう流れで処理が行われ、どのようなエラーが起こったか把握できる。

  • 2024年6月29日
  • 2024年7月3日

GoでJSONレスポンスに含めたくないデータがあるときの対処法

ユーザーデータをJSONで返すとして、その中にパスワードなどの返す必要のないデータが含まれていたときに、簡単に除外する方法がある。 たとえば、User構造体にパスワードが含まれていて、それをJSONレスポンスに含めたくない場合は、構造体のJSONタグに、json:”-“と書く […]