У меня есть следующая конструкция:
type Foo struct {
Bar func(foo *Foo) bool
}
Поскольку Bar
на самом деле не является методом, он принимает Foo
в качестве параметра (как self
в связанных методах Python). Однако я бы связал его со структурой как методом, если бы был простой способ. Я подозреваю, что мог бы использовать отражение, но я хочу, чтобы это было тривиально. Есть ли хитрость, чтобы связать функцию со структурой? Как бы вы это сделали?
Редактировать: я добавлю конкретный пример того, что я делаю.
type Route struct {
Matcher func(route *Route, r *http.Request) bool
}
Маршрут принимает пользовательскую функцию Matcher
. Если не установлено, функция соответствия по умолчанию устанавливается при регистрации маршрута:
func (mux *ServeMux) HandleRoute(r Route) {
// ...
// Set default matcher.
if r.Matcher == nil {
r.Matcher = mux.RouteMatcher
}
// ...
}
Затем эта функция используется для сопоставления:
func (mux *ServeMux) Match(r *http.Request) Route {
// ...
if route.Matcher(&route, r) {
...
}
...
}
Функция не привязана к маршруту. Мой вопрос заключается в том, является ли это разумным / идиоматическим способом установки пользовательского вызываемого объекта, или если есть хитрость, чтобы сделать функцию "привязанной" к структуре как метод.