database/sql下的DB对象找来找去找不到db.mu字段?

明明没有初始化DB { mu sync.Mutex }字段,db对象的方法却在使用db.mu.Lock,找来找去没找到这个字段在哪里赋值了。


func Open(driverName, dataSourceName string) (*DB, error) {
    driversMu.RLock()
    driveri, ok := drivers[driverName]
    driversMu.RUnlock()
    if !ok {
        return nil, fmt.Errorf("sql: unknown driver %q (forgotten import?)", driverName)
    }
    db := &DB{
        driver:   driveri,
        dsn:      dataSourceName,
        openerCh: make(chan struct{}, connectionRequestQueueSize),
        lastPut:  make(map[*driverConn]string),
    }
    go db.connectionOpener()
    return db, nil
}


func (db *DB) Ping() error {

    dc, err := db.conn(cachedOrNewConn)
    if err != nil {
        return err
    }
    db.putConn(dc, nil)
    return nil
}

func (db *DB) conn(strategy connReuseStrategy) (*driverConn, error) {
    db.mu.Lock()
    if db.closed {
       // .................
阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题