Bekkazy
@Bekkazy

Как реализовать интерфейс, в котором можно регистрировать функции на подобии http.HandleFunc?

Необходимо сделать почти то же самое что и в пакете net/http

Сначала зарегистрировать хэндлеры типа:
mypackage.RegisterHandler("/path", handler)

Нашёл код но как это реализовать, чтобы можно было регистрировать хэндлеры вне пакета, чтобы они потом вызывались?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
igorzakhar
@igorzakhar
Такой вариант (если я правильно понял твой вопрос):
package main

import (
	"fmt"
)

type HandlersMap map[string]func(string) string

func (hm HandlersMap) RegisterHandler(path string, handler func(string) string) {
	hm[path] = handler
}

func main() {
	m := make(HandlersMap, 0)

	m.RegisterHandler("1", myFunc1)
	m.RegisterHandler("2", myFunc2)

	handler1 := m["1"]
	handler2 := m["2"]

	fmt.Println(handler1("handler 1 output"))
	fmt.Println(handler2("handler 2 output"))
}

func myFunc1(s string) string {
	return fmt.Sprintf("MyFunc1: %s", s)
}

func myFunc2(s string) string {
	return fmt.Sprintf("MyFunc2: %s", s)
}

$ go run main.go 
MyFunc1: handler 1 output
MyFunc2: handler 2 output
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@stratosmi
Все три указанные библиотеки умеют регистрировать Handler из net/http:
  1. https://github.com/go-ozzo/ozzo-routing
  2. www.gorillatoolkit.org/pkg/pat
  3. www.gorillatoolkit.org/pkg/mux
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы