title: How to write several implementation of the same method that have a different signature
body: <p>I have several implementation of the same method <code>SetRateForMeasure</code>:</p>
  <pre><code>package repartition
  
  type Repartition interface {
      Name() string
      Compute(meters []models.Meter, totalsProd, totalsConso map[string]float64) []models.Meter
      SetRateForMeasure(meter models.Meter, measure models.Measure, total float64) float64
  }
  </code></pre>
  <p>Then, in my code (in repartition.go), I call it:</p>
  <pre><code>rate := repartition.SetRateForMeasure(meter, measure, total)
  </code></pre>
  <p>where repartition is the interface defined before.</p>
  <p>Thing is, when I add a new implementation of this method, the arguments of my functions might differ.</p>
  <p>For example, the static repartition use a static percentage that is only used in this case.</p>
  <p>I end up adding parameters so that I have a common interface to all methods, but it results that there is a lot of unused parameters depending on the implementation.</p>
  <p>If I add it to common interface, it will be unused for the other definitions.</p>
  <p>I tried to remove this method from my interface definition, but now</p>
  <pre><code>rate := repartition.SetRateForMeasure()
  </code></pre>
  <p>is no more defined.</p>
  <p>How should I organize my code ?</p>