我正在尝试使用以下代码从结构创建表。它最初是通过对凭据进行硬编码来进行测试来工作的。更改为env vars之后,我想测试表和模式是否将按预期创建。
到目前为止,我已经尝试过:
从数据库中删除表,运行“ go run main.go”。
删除数据库,使用psql“ CREATE DATABASE”命令重新创建数据库,然后运行“ go run main.go”
使用自动迁移,但无法成功创建表。
调试:当我在调试模式下运行它时,调试控制台显示其已连接,我看不到任何错误的迹象。我已经多年没有编码了,仍然处于学习过程中。
以下是2个文件:main.go和api.go(打开db)
MAIN.GO
import (
"fmt"
"log"
"net/http"
"time"
"github.com/gorilla/handlers"
"gitlab......"
_ "gitlab....."
)
var err error
func main() {
api := controllers.API{}
// Using env vars from a config file
api.Initialize("user=%s password=%s dbname=%s port=%s sslmode=disable")
// BIND TO A PORT AND PASS OUR ROUTER IN
log.Fatal(http.ListenAndServe(":8000", handlers.CORS()(api.Router)))
if err != nil {
panic(err.Error())
}
// Models
type Application struct {
ID string `json:"id" gorm:"primary_key"`
CreatedAt time.Time `json:"-"`
UpdatedAt time.Time `json:"-"`
Name string `json:"name"`
Ci string `json:"ci"`
// CREATE TABLES AND SCHEMA IF TABLES DO NOT EXIST
if !api.Database.HasTable(&Application{}) {
api.Database.CreateTable(&Application{})
}
API.GO
func (api *API) Initialize(opts string) {
// Initialize DB
dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s port=%s sslmode=disable",
config.DB_USER, config.DB_PASSWORD, config.DB_NAME, config.PORT)
api.Database, err = gorm.Open("postgres", dbinfo)
if err != nil {
log.Print("failed to connect to the database")
log.Fatal(err)
}
fmt.Println("Connection established")
log.Printf("Postgres started at %s PORT", config.PORT)
}
我已经创建了数据库,并且能够建立与数据库的连接。只是无法获得创建的表。
想法?