📑

【Golang】人のビルドプロセス見て我が振り直せ

2024/02/05に公開

エラーメッセージそのまま貼り付けて検索したらGitIssueしか出てこなかった時、ちょっと悲しくなりますよね。藤谷です。

golangで開発していた時のエラーと解決プロセスを残しておきます。

  • goとpostgresql(どちらもDockerでホスト)
  • ormはgormを使用

エラー内容

コンテナを立ち上げてgo buildを実行した際に、下記のエラーが発生しました。

building...
# gorm.io/driver/postgres
/go/pkg/mod/gorm.io/driver/postgres@v1.5.5/migrator.go:411:26: m.GuessConstraintInterfaceAndTable undefined (type Migrator has no field or method GuessConstraintInterfaceAndTable)

gorm.io/driver/postgresは、goアプリとpostgresqlを接続するドライバの役割を果たすライブラリです。
下記のファイルでdbを初期化する際に使用しています。

package database

import (
  "github.com/joho/godotenv"
  "gorm.io/gorm"
  "gorm.io/driver/postgres"
  "os"
  "fmt"
  "github.com/fs0414/go_hobby/internal/adapter/repository/schema"
)

func DbInit() {
  loadEnv()
  
  dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s TimeZone=%s",
    os.Getenv("POSTGRES_HOST"),
    os.Getenv("POSTGRES_USER"),
    os.Getenv("POSTGRES_PASSWORD"),
    os.Getenv("POSTGRES_DB"),
    os.Getenv("POSTGRES_POST"),
    os.Getenv("POSTGRES_SSLMODE"),
    os.Getenv("POSTGRES_TIMEZONE"),
  )

  database, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})

  if err != nil {
      panic("failed to connect to database")
  }

  database.AutoMigrate(&Schema{})
}

検索と発見

一旦エラー内容をそのまま検索してみました。
ヒットしたのはこの2件。人類は今までこのエラーどう対処してたの...

とりあえず出てきたページを開いてみると、GithubActionsか何かのビルドプロセスの確認ページで、全く同じエラーでビルドが失敗していました。
https://github.com/alist-org/alist/actions/runs/7772730564

次に「この人はどうやってエラーを解決したんだろう」と考えます。
ビルド画面にあるcommitlogのリンクを辿っていくと、あるコミットの差分表示ページを見つけられます。
https://github.com/alist-org/alist/commit/06f5bfd6a8d29de345be253fdfc63bee1f0c2812

gorm.io/driver/postgresgorm.io/gormのバージョンを下げてcommitしています。
自分のgo.modを確認してみます。

go.mod
module github.com/fs0414/go_hobby

go 1.20

require (
	github.com/gin-gonic/gin v1.9.1
	github.com/joho/godotenv v1.5.1
	gorm.io/driver/postgres v1.5.1
	gorm.io/gorm v1.25.4
)

// その他ライブラリ

どちらのバージョンもcommit画面でのバージョンよりも低いので、バージョン揃えて再度go buildを実行してみます。

go.mod
module github.com/fs0414/go_hobby

go 1.20

require (
	github.com/gin-gonic/gin v1.9.1
	github.com/joho/godotenv v1.5.1
	gorm.io/driver/postgres v1.5.4
	gorm.io/gorm v1.25.5
)

t// その他ライブラリ
```

```sh
go build /cmd/main.go

上記のgo buildは成功し、アプリケーションは正常に動きました。
ライブラリのバージョンが悪さしていましたね。

終わりに

人の解決プロセスがたくさん載っているGitIssueはとても良い資料で、苦手意識を持たずにもっと読んでいこうと思いました。
先人の知恵もっと借りてこ

Discussion