您好,登錄后才能下訂單哦!
這篇文章主要講解了“golang gorm錯誤處理事務及日志的使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“golang gorm錯誤處理事務及日志的使用方法”吧!
執(zhí)行任何操作后,如果發(fā)生任何錯誤,GORM將其設置為*DB
的Error
字段
if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil { // 錯誤處理... } // 如果有多個錯誤發(fā)生,用`GetErrors`獲取所有的錯誤,它返回`[]error` db.First(&user).Limit(10).Find(&users).GetErrors() // 檢查是否返回RecordNotFound錯誤 db.Where("name = ?", "hello world").First(&user).RecordNotFound() if db.Model(&user).Related(&credit_card).RecordNotFound() { // 沒有信用卡被發(fā)現處理... }
要在事務中執(zhí)行一組操作,一般流程如下。
// 開始事務 tx := db.Begin() // 在事務中做一些數據庫操作(從這一點使用'tx',而不是'db') tx.Create(...) // ... // 發(fā)生錯誤時回滾事務 tx.Rollback() // 或提交事務 tx.Commit()
func CreateAnimals(db *gorm.DB) err { tx := db.Begin() // 注意,一旦你在一個事務中,使用tx作為數據庫句柄 if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil { tx.Rollback() return err } if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil { tx.Rollback() return err } tx.Commit() return nil }
db.Exec("DROP TABLE users;") db.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,22,33}) // Scan type Result struct { Name string Age int } var result Result db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)
獲取查詢結果為*sql.Row
或*sql.Rows
row := db.Table("users").Where("name = ?", "jinzhu").Select("name, age").Row() // (*sql.Row) row.Scan(&name, &age) rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error) defer rows.Close() for rows.Next() { ... rows.Scan(&name, &age, &email) ... } // Raw SQL rows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows() // (*sql.Rows, error) defer rows.Close() for rows.Next() { ... rows.Scan(&name, &age, &email) ... }
rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error) defer rows.Close() for rows.Next() { var user User db.ScanRows(rows, &user) // do something }
從*gorm.DB
連接獲取通用數據庫接口*sql.DB
// 獲取通用數據庫對象`*sql.DB`以使用其函數 db.DB() // Ping db.DB().Ping()
db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100)
將多個字段設置為主鍵以啟用復合主鍵
type Product struct { ID string `gorm:"primary_key"` LanguageCode string `gorm:"primary_key"` }
Gorm有內置的日志記錄器支持,默認情況下,它會打印發(fā)生的錯誤
// 啟用Logger,顯示詳細日志 db.LogMode(true) // 禁用日志記錄器,不顯示任何日志 db.LogMode(false) // 調試單個操作,顯示此操作的詳細日志 db.Debug().Where("name = ?", "jinzhu").First(&User{})
db.SetLogger(gorm.Logger{revel.TRACE}) db.SetLogger(log.New(os.Stdout, "\r\n", 0))
感謝各位的閱讀,以上就是“golang gorm錯誤處理事務及日志的使用方法”的內容了,經過本文的學習后,相信大家對golang gorm錯誤處理事務及日志的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。