ゴール
このようにPostgreSQLにTodoテーブルをマイグレーションする方法です。
プロジェクトのディレクトリ構造
My-First-Beego-Project
├─ conf
│ └─ app.conf
├─ controllers
│ └─ default.go
├─ models
│ └─ todo.go
├─ routers
│ └─ router.go
├─ static
│ ├─ css
│ ├─ img
│ ├─ js
│ │ ├─ form.js
│ │ └─ reload.min.js
│ └─ lib
│ └─ boostrap
│ ├─ css
│ │ ├─ bootstrap-grid.min.css
│ │ └─ bootstrap.min.css
│ ├─ js
│ │ ├─ bootstrap-bundle.min.js
│ │ └─ bootstrap.min.js
│ └─ jquery
│ └─ jquery.js
├─ views
│ ├─ index.tpl
│ ├─ subIndex.tpl
│ └─ thirdIndex.tpl
└─ main.go
モジュールのインストール
beego orm
のインストール
cd
コマンドでプロジェクトに入って、下記のコマンドでインストールしましょう。
go get github.com/beego/beego/v2/client/orm
pq
のインストール
PostgreSQLと接続するモジュールをインストールしましょう。
go get github.com/lib/pq
config
ファイルの編集
PostgreSQLの接続情報を下記のように追加しておきます。
appname = my-first-beego-project
httpport = 8080
runmode = dev
db_driver = postgres
db_user = postgres
db_password = postgres
db_host = localhost
db_port = 5432
db_name = beegoDb
models
の編集
todo
テーブルを作るため、``Modelクラスを下記のように編集します。
package models // ここでパッケージ名を指定
import (
"github.com/beego/beego/v2/client/orm"
_ "github.com/lib/pq" // PostgreSQL ドライバをインポート
)
type Todo struct {
Id int64 `orm:"auto"`
Title string `orm:"size(128)"`
Description string `orm:"size(255)"`
Completed bool `orm:"default(false)"`
}
func init() {
// PostgreSQLのドライバ登録
orm.RegisterDriver("postgres", orm.DRPostgres)
// データベース接続設定
orm.RegisterDataBase("default", "postgres", "user=postgres password=postgres host=localhost port=5432 dbname=beegoDb sslmode=disable")
// モデルの登録
orm.RegisterModel(new(Todo))
// テーブルが存在しない場合に作成(強制的にマイグレーション)
orm.RunSyncdb("default", false, true)
}
main.go
の編集
実行ファイルmain.go
に編集したモデルクラスをインポートしておきます。
package main
import (
_ "my-first-beego-project/models" // modelsパッケージをインポート
_ "my-first-beego-project/routers"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}
マイグレーションする
いよいよモデルクラスをPostgreSQLに反映させます。
bee run
このようにコマンドパレットに表示されたらOKです。
トラブルシューティング
bee run
コマンドを入力してもmodule依存関係エラー
が表示される。
0003 Initializing watcher...
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\context\output.go:34:2: missing go.sum entry for module providing package gopkg.in/yaml.v2 (imported by github.com/astaxie/beego/context); to add:
go get github.com/astaxie/beego/context@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\admin.go:28:2: missing go.sum entry for module providing package github.com/prometheus/client_golang/prometheus/promhttp (imported by github.com/astaxie/beego); to add:
go get github.com/astaxie/beego@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\app.go:33:2: missing go.sum entry for module providing package golang.org/x/crypto/acme/autocert (imported by github.com/astaxie/beego); to add:
go get github.com/astaxie/beego@v1.12.3
2025/02/07 23:56:03 ERROR ▶ 0004 Failed to build the application: ..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\context\output.go:34:2: missing go.sum entry for module providing package gopkg.in/yaml.v2 (imported by github.com/astaxie/beego/context); to add:
go get github.com/astaxie/beego/context@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\admin.go:28:2: missing go.sum entry for module providing package github.com/prometheus/client_golang/prometheus/promhttp (imported by github.com/astaxie/beego); to add:
go get github.com/astaxie/beego@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\app.go:33:2: missing go.sum entry for module providing package golang.org/x/crypto/acme/autocert (imported by github.com/astaxie/beego); to add:
go get github.com/astaxie/beego@v1.12.3
⇒このエラーメッセージは、Goモジュールが依存関係に必要なgo.sumエントリを欠いていることが原因です。go.sumファイルは、プロジェクトで使用しているGoパッケージのチェックサムを記録し、正確な依存関係のバージョンを管理します。エラーメッセージで「missing go.sum entry for module providing package...」とあるのは、必要なモジュールのチェックサムがgo.sumにないということを意味します。
これを解決するには、以下の手順を試してください。
go get gopkg.in/yaml.v2
go get github.com/prometheus/client_golang/prometheus/promhttp
go get golang.org/x/crypto/acme/autocert
これでも問題が解決しない場合は、``を実行して、未使用の依存関係を整理し、必要な依存関係を正しく解決することができます。
go mod tidy
すると、このように依存関係を調整してくれます。
参考にしたサイト