CodeSampleX

サンプル

gorm.io/gorm 1.31.2: Run GORM on SQLite with CGO_ENABLED=0, past go-sqlite3's runtime stub error

検証済みサンプル — golang gorm.io/gorm 1.31.2: Run GORM on SQLite with CGO_ENABLED=0, past go-sqlite3's runtime stub error. go 1.26 · linux alpine/x64 · docker で…

sha256:c3632f2f8dc28bb7ef59c80bcd728225b10ed65370fcd4c71af75032848b2f02

このネットワークが提供するのは一つだけです。ビルドされるサンプル。サンドボックスで実行し、署名済みの受領証を保管します。等級はつけず、何も保証しません — 同じコードがあなたの環境でビルドされるかは測定していません。 合格した契約受領証を提出した異なる署名鍵の数です。1 なら作者だけ、2 以上なら他の誰かもビルドしています。鍵は自己生成で背後に登録された身元がないため、数えているのは人ではなく鍵です。 MIT-0

実行証拠

宣言された環境と署名済みの実行を分けてあります。このサンプルが何をどこで実行したかをそのまま確認できます。

証拠の基準
署名済みコントラクト合格
検証レシート
2
ビルドした署名鍵
2
宣言された環境 go 1.26 linux · musl x64 go 1.26 go go

検証実行環境

環境 コントラクト ステージ 実行日
go 1.26 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1
2026-08-14
go 1.26 · linux alpine/x64 · docker ed25519:d91480838ac982c9 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1
2026-08-18

ケース

HOW
ゴール
Run GORM on SQLite with CGO_ENABLED=0, past go-sqlite3's runtime stub error
パッケージ
シンボル
  • sqlite.Open
  • gorm.Open
  • gorm.DeletedAt
  • gorm.ErrRecordNotFound
  • gorm.ErrDuplicatedKey
  • gorm.Config.TranslateError
  • sql.Open
  • sql.Drivers
  • DB.Ping
  • DB.AutoMigrate
  • DB.Updates
  • DB.Update
  • DB.Select
  • DB.First
  • DB.Find
  • DB.Unscoped
  • DB.Create
環境
go 1.26
作成日
2026-08-14T13:23:54Z

コントラクト

  1. assert the build has cgo off and that there is no C compiler on PATH, so rebuilding with CGO_ENABLED=1 has nothing to invoke
  2. assert gorm.io/driver/sqlite still compiles and links with cgo off, since the contract binary imports it, and that its stub registers the database/sql driver name sqlite3 alongside the pure-Go engine's sqlite
  3. assert opening that cgo driver fails only at connection time, with go-sqlite3's Binary was compiled with CGO_ENABLED=0 stub message
  4. assert sql.Open on sqlite3 returns no error at all, because it does not connect, and that Ping is where the stub surfaces
  5. assert the linked pure-Go engine reports SQLite 3.53.3, so the forced modernc.org/sqlite pin cannot drift back to what minimal version selection would pick
  6. assert AutoMigrate creates the table and its deleted_at column, that running it again on an unchanged model is a no-op rather than an error, and that Create writes the auto-increment key back into the struct
  7. assert Updates with a struct writes the non-zero field and silently omits false and 0, returning no error and RowsAffected 1
  8. assert Updates with a map writes those same zero values, since a map has no zero value to be confused by
  9. assert Select names the columns that force a struct's zero values through
  10. assert Update with an explicit value writes a literal zero
  11. assert First on a missing row returns gorm.ErrRecordNotFound while Find returns a nil error with RowsAffected 0
  12. assert gorm.DeletedAt makes Delete an UPDATE: Find and First skip the row, Unscoped finds it with DeletedAt.Valid set, and a raw count shows the row still in the table
  13. assert reusing the primary key of a soft-deleted row fails with SQLite's own UNIQUE constraint failed: users.id message, which does not match gorm.ErrDuplicatedKey by default
  14. assert TranslateError makes that same conflict match gorm.ErrDuplicatedKey and replaces the driver error, so the constraint message is gone
  15. assert two connections to :memory: are two separate databases, so the migrated table is missing on the second one unless the pool is pinned to a single connection

ファイル

  • csx.json
  • go.mod
  • go.sum
  • src/cgo_off.go
  • src/cgo_on.go
  • src/store.go
  • test/main.go

ソースアーティファクトをダウンロード (tar.gz)

オリジンシーダー

anonymous