如何将排序接口实现类型作为函数参数传递?

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?

Maybe this way

type Schedule struct {
    Jobs []Job
}
const(
Difference=iota
Ratio=iota
)
type ByDifference Schedule
// ByDifference implements sort.Interface

type ByRatio Schedule
// ByRatio implements sort.Interface

func (s *Schedule) Schedule(order int) { // s.Schedule(Difference) for example
    // Summation variables omitted
    switch order{
        case Difference: ss:= ByDifference(*s);  sort(ss); s=&Schedule(ss)
        case Ratio: ss:= ByRatio(*s);  sort(ss); s=&Schedule(ss)
    }

    for _, v := range s.Jobs {
        // Compute weighted sum omitted
    }

    // Output code omitted

}