golang的事务管理是一件很麻烦的事,,能不能像Java那样,通过Spring管理事务,最近琢磨了一下,写了一个demo,用来管理golang的事务,使其支持golang事务的嵌套调用。
其思想很简单,对于所有的写数据库操作,用一个标记来标记事务的开启和关闭
下面是一个演示示例:
我只是写了一个简单demo,这里贴出实现代码:
package session
import (
"database/sql"
)
const beginStatus = 1
// SessionFactory 会话工厂
type SessionFactory struct {
*sql.DB
}
// Session 会话
type Session struct {
db *sql.DB // 原生db
tx *sql.Tx // 原生事务
commitSign int8 // 提交标记,控制是否提交事务
rollbackSign bool // 回滚标记,控制是否回滚事务
}
// NewSessionFactory 创建一个会话工厂
func NewSessionFactory(driverName, dataSourseName string) (*SessionFactory, error) {
db, err := sql.Open(driverName, dataSourseName)
if err != nil {
panic(err)
}
factory := new(SessionFactory)
factory.DB = db
return factory, nil
}
// GetSession 获取一个Session
func (sf *SessionFactory) GetSession() *Session {
session := new(Session)
session.db