以下是使用GORM进行事务操作的示例代码:

import (
    "gorm.io/gorm"
    "gorm.io/driver/mysql"
)

func main() {
    // 创建数据库连接
    dsn := "user:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // 开始事务
    tx := db.Begin()
    defer func() {
        if r := recover(); r != nil {
            tx.Rollback()
        }
    }()

    // 执行操作
    if err := tx.Create(&User{Name: "Alice"}).Error; err != nil {
        tx.Rollback()
        panic(err)
    }

    if err := tx.Create(&User{Name: "Bob"}).Error; err != nil {
        tx.Rollback()
        panic(err)
    }

    // 提交事务
    if err := tx.Commit().Error; err != nil {
        tx.Rollback()
        panic(err)
    }
}

在这个示例中,我们首先创建了一个GORM数据库连接,并调用db.Begin()方法开始一个新的事务。然后,我们以类似于普通的GORM操作一样执行事务操作。

在执行事务操作时,如果出现了任何错误,则应该立即回滚事务,并抛出异常。最后,如果没有发生任何错误,则调用tx.Commit()方法提交事务。

需要注意的是,在使用事务时,一定要确保所有操作都在同一个事务中进行,否则可能会产生意外的结果。此外,为了保证事务操作的正确性和可靠性,我们还需要对异常情况进行处理,例如在发生异常时及时回滚事务。