I am writing different scheduling algorithm and would like to compare various ways of ordering jobs. I have a function on a struct that I would like to pass the type of a sort interface type to be used by the sort within the function.
type Schedule struct {
Jobs []Job
}
type ByDifference []Job
// ByDifference implements sort.Interface
type ByRatio []Job
// ByRatio implements sort.Interface
func (s *Schedule) Schedule(OrderBy sort.Interface) {
// Summation variables omitted
// This fails as there is no function OrderBy()
sort.(OrderBy(q.Jobs))
for _, v := range q.Jobs {
// Compute weighted sum omitted
}
// Output code omitted
}
Naturally, I would like to to call the Schedule function and pass some representation of ByDifference or ByRatio and have the sort use that type. My initial reading seems to lead to type reflection. Is it possible to use this design to pass a type that implements an interface to be used by sort within a function?