GORM Save Silently Upserts Associations — How Deleted Records Come Back and How to Stop It
GORM's Save(&model) automatically upserts all associated records. If a deleted association reappears after Save, a concurrent goroutine is likely the culprit. Two-stage fix: Association().Delete as a quick patch, Omit as the permanent solution. Covers GORM v1 and v2.
GoのHTTPクライアントでリダイレクトを検知する方法
Goのnet/httpはデフォルトで自動リダイレクトしますが、http.Client.CheckRedirectにhttp.ErrUseLastResponseを返す関数を設定すると、リダイレクト前のレスポンス(301/302)を取得できます。Locationヘッダからリダイレクト先URLを取り出す実装例付き。
Goのスライスから値を指定して要素を削除する方法——slices.DeleteFuncも解説
Go言語でスライスから特定の値を持つ要素を削除する方法。Go 1.21以降はslices.DeleteFuncが使える。ループ中の削除パターン(インデックスのズレ対策)も合わせて解説。
GORM の Save はアソシエーションを Upsert で上書きする──削除した関連が復活するバグの原因と対処
GORM の Save(&model) はアソシエーションを自動的に Upsert で上書きします。Delete したはずの関連レコードが復活する場合、別の goroutine が Save を呼んでいるのが原因である可能性が高いです。暫定対応(Association().Delete)と恒久対応(Omit)の2段階で解消した手順を紹介します。
GORMでSQL文を確認する方法【Debug()とLogMode・v1/v2対応】
GORMで実行されるSQL文をコンソールに出力する方法を2パターン解説。Debug()で単一クエリを確認し、LogMode(logger.Info)で全体を追う使い分けと、環境変数での切り替え実装まで。