📑
【Golang】人のビルドプロセス見て我が振り直せ
エラーメッセージそのまま貼り付けて検索したら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か何かのビルドプロセスの確認ページで、全く同じエラーでビルドが失敗していました。
次に「この人はどうやってエラーを解決したんだろう」と考えます。
ビルド画面にあるcommitlogのリンクを辿っていくと、あるコミットの差分表示ページを見つけられます。
gorm.io/driver/postgres
とgorm.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