1. 语法
从这里开始使用 'tx',而不是 'db'
400
2. 完整示例
| package main |
| |
| import ( |
| "database/sql" |
| "fmt" |
| "gorm.io/driver/mysql" |
| "gorm.io/gorm" |
| "time" |
| ) |
| |
| type User struct { |
| ID int64 |
| Age int64 |
| Name string |
| Email string |
| Company string |
| Deleted gorm.DeletedAt |
| } |
| |
| |
| func main() { |
| db,sqlDB,_ := connect() |
| defer sqlDB.Close() |
| CreateAnimals(db) |
| |
| } |
| |
| func CreateAnimals(db *gorm.DB) (err error) { |
| |
| tx := db.Begin() |
| defer func() { |
| if r := recover(); r != nil { |
| tx.Rollback() |
| } |
| }() |
| |
| if err := tx.Error;err != nil { |
| return err |
| } |
| |
| if err := tx.Create(&User{Name: "ZhaoYun",Age: 18}).Error; err != nil { |
| tx.Rollback() |
| return err |
| } |
| |
| if err := tx.Create(&User{Name: "MaChao",Age: 20}).Error; err != nil { |
| tx.Rollback() |
| return err |
| } |
| |
| return tx.Commit().Error |
| } |
| |
| func connect() (db *gorm.DB,sqlDB *sql.DB,err error) { |
| dsn := "root:40010355@tcp(127.0.0.1:3306)/crow?charset=utf8&parseTime=True&loc=Local" |
| db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) |
| sqlDB,_ = db.DB() |
| if err != nil { |
| fmt.Printf(err.Error()) |
| defer sqlDB.Close() |
| }else { |
| fmt.Printf("OK\n") |
| sqlDB.SetMaxIdleConns(10) |
| sqlDB.SetMaxOpenConns(100) |
| sqlDB.SetConnMaxLifetime(time.Hour) |
| } |
| return |
| } |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)