code: func (db *DB) Begin(writable bool) (*Tx, error) {
  	if writable {
  		return db.beginRWTx()
  	}
  	return db.beginTx()
  }
docs: // Begin starts a new transaction.
  // Multiple read-only transactions can be used concurrently but only one
  // write transaction can be used at a time. Starting multiple write transactions
  // will cause the calls to block and be serialized until the current write
  // transaction finishes.
  //
  // Transactions should not be dependent on one another. Opening a read
  // transaction and a write transaction in the same goroutine can cause the
  // writer to deadlock because the database periodically needs to re-mmap itself
  // as it grows and it cannot do that while a read transaction is open.
  //
  // If a long running read transaction (for example, a snapshot transaction) is
  // needed, you might want to set DB.InitialMmapSize to a large enough value
  // to avoid potential blocking of write transaction.
  //
  // IMPORTANT: You must close read-only transactions after you are finished or
  // else the database will not reclaim old pages.