CATEGORY

Go

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

Goのスライスの挙動

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

  • 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などの他の通知方法を実装する際にも、このイ […]