• 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:”-“と書く […]

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

Goのインターフェイスの使い方

何かの手段で通知をしたい場合を例に挙げる 他の言語でも共通することだが、実装をインターフェイスに依存させることで、機能の差し替えがしやすくなったり、テストが書きやすくなる効果がある(モック)。 今回の例では、Slackとメールだが、LINEやChatworkなどの他の通知方法を実装する際にも、このイ […]

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

apache2.2で特定のIPからのアクセスを制限する

apache2.2で特定のIPからのアクセスを制限するには、以下のように書く 許可するIPが先、拒否するIPが後の場合 拒否するIPが先、許可するIPが後の場合 気をつける点 特定のIPだけ許可して、それ以外は全拒否したい場合 以下の場合、許可した後に全拒否されるので、意図した動作にならない 正しく […]