
Aleksandr
11.01.2018
13:24:54
либо Handler либо HandlerFunc

Александр
11.01.2018
13:25:08
не обязан же ?

Aleksandr
11.01.2018
13:25:25

Google

Александр
11.01.2018
13:25:44
func routeMiddleware(config *config.Config, handler http.Handler) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
handler.ServeHTTP(w, r)
}
}
что-то такое там

Aleksandr
11.01.2018
13:26:31
во первых это сторонний пакет, во вторых, присмотрись, тут все под интерфейсами

Александр
11.01.2018
13:27:31
я к тому что раз хедлеры вызываются "руками" из middleware
то уже можно пойти в разврат ?
ограничений не особо

Aleksandr
11.01.2018
13:28:12
моя твоя опять не понимать. вернемся к тому, что хэндлер все равно реализует что-то
https://golang.org/pkg/net/http/#Handler
https://golang.org/pkg/net/http/#HandlerFunc
сигнатура одинаковая, только форма разная

Александр
11.01.2018
13:29:30
HandlerFunc там в любом случаи будет реализовано
ты видишь там замыкание?

Aleksandr
11.01.2018
13:30:27
конечно. и экшн либо одно дибо второе реализует

Google

Александр
11.01.2018
13:31:13
но внутри экшена то мы опять вызываем ServeHTTP
хотя ограничений уже нет, можно что угодно творить

Aleksandr
11.01.2018
13:31:42
так а где у тебя ограничения появляются?

Александр
11.01.2018
13:32:39
если использовать стандартну либу то только ServeHTTP
она другие не прожует
еще функции
но с функциями все хорошо, пока не надо зависимости скормить

Aleksandr
11.01.2018
13:33:23

Александр
11.01.2018
13:34:00
ну что и?
я вот на распутье как сделать

Aleksandr
11.01.2018
13:34:10

Александр
11.01.2018
13:34:25
еще раз, для сторонней ОБЕРТКА
там хоть ааа() вызывай
строго похрену
в роутер кормиться все с routeMiddleware, и никак иначе

Aleksandr
11.01.2018
13:35:34
я не вижу здесь чего-то отличающегося от стандартной либы, кроме параметров и конфига в сигнатуре

Александр
11.01.2018
13:36:05

Aleksandr
11.01.2018
13:36:08

Google

Александр
11.01.2018
13:36:20

Aleksandr
11.01.2018
13:36:37

Александр
11.01.2018
13:36:42
routeMiddleware возращает анонимную функцию, может вообще ничего не вызывать
что внутри функции происходит
"эмуляция" ли вызова ServeHTTP, или у структуры есть куча методов не под один интерфейс
это не имеет никакого значения
кроме как "так принято делать"

Aleksandr
11.01.2018
13:38:07

Александр
11.01.2018
13:38:29
а внезапно оно и не возращает ничего ?

Aleksandr
11.01.2018
13:38:49
а чтобы вернуло, надо дернуть что? handler.ServeHTTP

Александр
11.01.2018
13:39:28
не обязательно
главное по ссылке скормить туда w http.ResponseWriter, r *http.Request

Aleksandr
11.01.2018
13:39:39
и в итоге у тебя не произвольный код, а просто лишняя прослойка над стандартным интерфейсом

Александр
11.01.2018
13:40:20
не обязательно это может быть метод структуры ААА(ResponseWriter, *Request)

Aleksandr
11.01.2018
13:40:49

Александр
11.01.2018
13:40:50
мы тут "потеряли" стандартный вызов, поэтому никто за нами не проверит

Aleksandr
11.01.2018
13:41:01

Александр
11.01.2018
13:41:36
если вы про то, что можно ли было вызвать сразу хендлер то нет

Aleksandr
11.01.2018
13:41:51
нет

Google

Александр
11.01.2018
13:41:57
ибо там код который в middleware накармливает на несколько запросов сразу, универсальный
походу без примера не поймем

Aleksandr
11.01.2018
13:44:27

Александр
11.01.2018
13:44:32
router.GET("/users/:guid", routeMiddleware(config, &Get{
Db: dbConnect,
Tracer: myTracer,
}))
router.POST("/users", routeMiddleware(config, &Create{
Db: dbConnect,
Tracer: myTracer,
}))
router.PUT("/users/:guid", routeMiddleware(config, &Modify{
Db: dbConnect,
Tracer: myTracer,
}))
далее
func routeMiddleware(config *config.Config, handler http.Handler) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
// тут некий код
handler.ServeHTTP(w, r)
// и тут
}
}

Aleksandr
11.01.2018
13:46:19
&Get покажи это

Александр
11.01.2018
13:46:29
тут бы "срезать" объявив всего 1 унивасальную структуру с методами
type Get struct {
Tracer *tracer.Tracer
Db *db.Connect
}
func (h *Get) ServeHTTP(w http.ResponseWriter, r *http.Request) {
sResult = ....
successResponce = responce.MakeSuccessResponce(sResult)
successResponce.WriteJson(w)
}

Aleksandr
11.01.2018
13:47:44
то есть это тупо реализация стандартного Handler

Admin
ERROR: S client not available

Aleksandr
11.01.2018
13:47:52
тогда я не пойму что ты мне хотел покахать на примере

Александр
11.01.2018
13:48:36
у меня сейчас 4 структуры на 1 рест метод, сложная иницилизация

Aleksandr
11.01.2018
13:48:37
на стандартной либе у меня было бы то же самое. только без routeMiddleware итд

Александр
11.01.2018
13:48:42
я все думаю как срезать ?
хотел объявить одну единут структуру с зависимостями
и сделать методы под каждый метод

Nikolay
11.01.2018
13:49:41

Александр
11.01.2018
13:50:13
type Controller struct {
Tracer *tracer.Tracer
Db *db.Connect
}
func (h *Get) Get(w http.ResponseWriter, r *http.Request) {
}
func (h *Get) Collection(w http.ResponseWriter, r *http.Request) {
}
func (h *Get) Create(w http.ResponseWriter, r *http.Request) {
}
аля так

Google

Aleksandr
11.01.2018
13:50:42
ну, стандартная либа так позволяет
почему нет?
методы у тебя реализуют HandlerFunc

Александр
11.01.2018
13:52:26
ну 1 длинный файл смущает
по классике там должно не более 75 строк
иначе простыня сложно читаемая
и максимально побита на файлы, ибо табами удобно смотреть
чем листать

anton
11.01.2018
13:53:52

Aleksandr
11.01.2018
13:53:53
я не могу одно с другим соотнести. почему наличие 3-4 методов у структуры - сразу простыня? почему один файл?

Александр
11.01.2018
13:54:07
потому что методы ДЛИННЫЕ
1 хендлер сейчас это 70-100 строк

Aleksandr
11.01.2018
13:54:22

Александр
11.01.2018
13:54:25
а их 4-ре надо уместить
запрос в бд в конце концов

Aleksandr
11.01.2018
13:55:03

anton
11.01.2018
13:55:41

Александр
11.01.2018
13:56:03
а там все переплетается, валидация например не может жить без бд
тут надо поискать, там надо поискать

Aleksandr
11.01.2018
13:56:41
понимаешь, все твои проблемы - это из-за стиля написания приложения. Но ты удивляешься, когда тебя не понимают. Тебе очевидно что все должны писать так как ты. Нет, все не так.

Александр
11.01.2018
13:57:21
ну?