@proGO

Страница 1133 из 1674
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

она другие не прожует

еще функции

но с функциями все хорошо, пока не надо зависимости скормить

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

я вот на распутье как сделать

Aleksandr
11.01.2018
13:34:10
если использовать стандартну либу то только ServeHTTP
а сторонние что позволяют произвольный метод пихнуть?

Александр
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)

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

Александр
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
prometheus node exporter хорошо умеет все эти метрики в прометеус отдавать. Но чтоб снимать автоматически дамп - надо костылить
а есть статья где-нибудь про то, как это все делать через node_exporter? я просто его не настраивал ни разу, хочу вникнуть

Александр
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
1 хендлер сейчас это 70-100 строк
зачем? хэндлер должен данные отдать, которые вернет сервисный слой. а ну да, в пхп принято логику в экшнах писать)

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

тут надо поискать, там надо поискать

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

а там все переплетается, валидация например не может жить без бд
у всех так. ты не уникальное приложение пишешь

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

Страница 1133 из 1674