- 2024年6月30日
- 2024年7月3日
Goのsql.Openは必ずしも接続を確立しない
タイトルのとおり、sql.Openは必ずしも接続を確立しないようです。 https://pkg.go.dev/database/sql#Open Open may just validate its arguments without creating a connection to the dat […]
タイトルのとおり、sql.Openは必ずしも接続を確立しないようです。 https://pkg.go.dev/database/sql#Open Open may just validate its arguments without creating a connection to the dat […]
Goのスライスの挙動について調べたので書く。 容量を超える要素を追加したときは、元の容量を2倍したスライスが作られる。 元のスライスをコピーして新しいスライスが作られるため、メモリ上のアドレスが異なる。 つまり、元のスライスの分だけ、余分にメモリを消費するということ。 ということは、下記のような場合 […]
GoでJSONを扱う場合、”encoding/json”パッケージを使います。 よく使うのは、MarshalとUnmarshalの2つですが、今回は以下のメソッドを使用していきます。 このようにNewEncoder、NewDecoderを使用すると、MarshalやUnmar […]
構造体のフィールドの値を変更する必要があるなら、構造体のポインタで渡す。 そうでないなら、値で渡す。 値で渡した場合は、構造体のコピーが作られるため、元のデータが変更されない。 なので、基本的にポインタで渡しておき、フィールドのデータを書き換える必要がない場合や明確に元のデータを書き換えたくない場合 […]
errors.Is エラーチェーンの中で、特定のエラーが存在するか確認する場合に使う。 以下の場合だと、queryDatabase関数内でErrDatabaseエラーが発生していて、それをmain関数内で存在しているか確認している。 もしqueryDatabase関数でエラーがない場合は、conve […]
Goにはスタックトレース機構がないので、どういう流れで処理が行われたのかが把握できない。 そのため、一番初めの呼び出し元にエラーをラップして戻す方法で、エラーの流れを把握する。 このようにすると、どういう流れで処理が行われ、どのようなエラーが起こったか把握できる。
ユーザーデータをJSONで返すとして、その中にパスワードなどの返す必要のないデータが含まれていたときに、簡単に除外する方法がある。 たとえば、User構造体にパスワードが含まれていて、それをJSONレスポンスに含めたくない場合は、構造体のJSONタグに、json:”-“と書く […]
何かの手段で通知をしたい場合を例に挙げる 他の言語でも共通することだが、実装をインターフェイスに依存させることで、機能の差し替えがしやすくなったり、テストが書きやすくなる効果がある(モック)。 今回の例では、Slackとメールだが、LINEやChatworkなどの他の通知方法を実装する際にも、このイ […]