func (c *ClientConn) getBackendConn(n *backend.Node, fromSlave bool) (co *backend.BackendConn, err error) { if !c.isInTransaction() { if fromSlave { co, err = n.GetSlaveConn() if err != nil { co, err = n.GetMasterConn() } } else { co, err = n.GetMasterConn() } if err != nil { golog.Error("server", "getBackendConn", err.Error(), 0) return } } else { var ok bool c.Lock() co, ok = c.txConns[n] c.Unlock() if !ok { if co, err = n.GetMasterConn(); err != nil { return } if err = co.Begin(); err != nil { return } c.Lock() c.txConns[n] = co c.Unlock() } } //todo, set conn charset, etc... if err = co.UseDB(c.db); err != nil { return } if err = co.SetCharset(c.charset); err != nil { return } return }