Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与gorm一起编写一个goose go迁移_Go_Database Migration_Go Gorm - Fatal编程技术网

与gorm一起编写一个goose go迁移

与gorm一起编写一个goose go迁移,go,database-migration,go-gorm,Go,Database Migration,Go Gorm,默认go迁移准备一个函数,该函数提供一个*sql.Tx: 提供了一个事务,而不是直接提供DB实例,因为goose还需要在同一事务中记录模式版本。每次迁移都应该作为一个事务运行,以确保数据库的完整性,因此这是一个很好的实践 我想使用编写我的迁移,但我不确定如何使用给定的事务来达到这个目的。下面是一个例子: func Up_20151230135812(txn *sql.Tx) { txn.CreateTable(&User{}) } 该构建为我提供了未定义的txn.CreateTab

默认go迁移准备一个函数,该函数提供一个
*sql.Tx

提供了一个事务,而不是直接提供DB实例,因为goose还需要在同一事务中记录模式版本。每次迁移都应该作为一个事务运行,以确保数据库的完整性,因此这是一个很好的实践

我想使用编写我的迁移,但我不确定如何使用给定的事务来达到这个目的。下面是一个例子:

func Up_20151230135812(txn *sql.Tx) {
  txn.CreateTable(&User{})
}

该构建为我提供了未定义的
txn.CreateTable(type*sql.Tx没有字段或方法CreateTable)
。如何获取用于gorm的事务?

goose对gorm及其功能(CreateTable等)一无所知

看看这本书的结尾

只需创建事务

db, err := goose.OpenDBFromDBConf(&conf)
if err != nil {
    log.Fatal("failed to open DB:", err)
}
defer db.Close()

txn, err := db.Begin()
if err != nil {
    log.Fatal("db.Begin:", err)
}

{{ .Func }}(txn)

err = goose.FinalizeMigration(&conf, txn, {{ .Direction }}, {{ .Version }})
if err != nil {
    log.Fatal("Commit() failed:", err)
}
并从“数据库/sql”包中使用


但是您可以使用gorm;-)实现自定义包装器

我希望会有一个类似的现有包装器,但是对于
sql.Tx