code: func NewTranslator(filename string, fields ...string) (bt *Translator, err error) {
  	bt = &Translator{
  		fields: make(map[string]struct{}),
  	}
  	bt.Db, err = bolt.Open(filename, 0600, &bolt.Options{Timeout: 1 * time.Second, InitialMmapSize: 50000000, NoGrowSync: true})
  	if err != nil {
  		return nil, errors.Wrapf(err, "opening db file '%v'", filename)
  	}
  	bt.Db.MaxBatchDelay = 400 * time.Microsecond
  	err = bt.Db.Update(func(tx *bolt.Tx) error {
  		ib, err := tx.CreateBucketIfNotExists(idBucket)
  		if err != nil {
  			return errors.Wrap(err, "creating idKey bucket")
  		}
  		vb, err := tx.CreateBucketIfNotExists(valBucket)
  		if err != nil {
  			return errors.Wrap(err, "creating valKey bucket")
  		}
  		for _, field := range fields {
  			_, _, err = bt.addField(ib, vb, field)
  			if err != nil {
  				return err
  			}
  		}
  		return nil
  	})
  	if err != nil {
  		return nil, errors.Wrap(err, "ensuring bucket existence")
  	}
  	return bt, nil
  }
docs: // NewTranslator gets a new Translator