code: func (m *mater) Go(g1, g2 *IGenome) (IGenome, IGenome) {
  
  	newG1 := NewGenome(*(*g1).GetBits())
  	newG2 := NewGenome(*(*g2).GetBits())
  	for _, config := range m.materConfig {
  		if rand.Float32() < config.P {
  			if config.UseElite {
  				newG1, newG2 = config.F(&newG1, m.elite)
  			} else {
  				newG1, newG2 = config.F(&newG1, &newG2)
  			}
  		}
  	}
  
  	return newG1, newG2
  }
docs: // Go cycles through, and applies, the configures mater functions in the
  // MaterFunctionProbability array