Wingman
собственно, вопрос уже другой: как получить текущую ситсемную таймзону %) да-да, доку читаю
Wingman
Wingman
Vladislav
Mikhail
Andrey
Daniel
вариантов три: не возвращать, возвращать и паниковать
Daniel
-1 - это, очевидно, паника
Daniel
возвращать - тут все ясно
Daniel
а вот с "не возвращать" есть вопрос
какую размерность должен иметь результирующий массив? "как передали" или "как нашлось"? по мне - так "как передали"
Andrey
Можно ещё так
https://play.golang.org/p/qUxzTKj-yqc
я бы не сказал, что это отличный алгоритм. Во-первых, там много append, хотя можно заранее посчитать длину результата и выделить сразу. Во-вторых, это важнее, SplitSlice возвращает массив, который ссылается на переданный аргумент. Любое изменение переданного в SplitSlice изначального массива меняет результат. Пруф: https://play.golang.org/p/c4lyKLTS5r0
Andrey
Я вам тут кидал свою реализацию, вы её проигнорили :)
Sergey
Daniel
не уверен
Mikhail
Sergey
Andrey
0
Sergey
Все будет в первой строке таблицы
Andrey
То есть 0 - это INF. Тоже вариант. Тогда это нужно документировать. В этом случае действительно не надо возвращать ошибку.
Mikhail
Как я уже писал ранее, этот алгоритм всего лишь прототип для вот этой функции:
https://play.golang.org/p/IVossDr169B
Mikhail
так что проверки на 0, отрицательное значение, возврат ошибки - врядли требуются
Mikhail
Andrey
да, без контекста трудно судить.
Andrey
То есть вы надеетесь на то, что caller передаст валидные входные данные
Andrey
и не будет их потом переделывать, либо это желаемое для вас поведение.
lynx
Всем привет. Есть задачка, кому не лень подскажите.
Как эффективнее найти все элементы из массива структуры по полю ID int, при этом все ID перечислены в массиве a []int?
Aleksandr
lynx
Andrey
и у A есть поле ID int
lynx
Andrey
https://gobyexample.com/collection-functions - смотрите на Filter и переделывайте её под себя
Andrey
у вас будет func Filter(vs []A, f func(A) bool) []A
Andrey
а для фильтрующей функции можно использовать Index и Include оттуда же
Aleksandr
lynx
lynx
Andrey
Да, с map[int]bool будет эффективнее, скорее всего, там наверняка быстрее поиск по ключам, чем проверка существования элемента в []int
Oleg
может кто подсказать? Есть такие маршруты
r.GET("/a/b/:c/d", handler1)
r.POST("/a/b/:c/f", handler2)
использую fasthttprouter, паникует, типа одинаковый префикс. В ишьюсах ответы типа - не делайте так. Есть ещё какое-то решение данной проблемы?
Илья
Andrey
методы вроде разные.
Илья
добавть один хендлер, разумеется и внутри уже смотреть метод
Илья
но это проблема тоно, что выбрали fast
Илья
это его ограничение -- нельзя разные суффиксы
Илья
он не строит дерево по методам и хваостам
Илья
проще взять echo или gorilla/mux
Илья
если рейт запрососв конечно ниже дестяков тысяч в секунду
Oleg
по скорости не хотелось бы проигрывать, посмотрел ещё gin, но там вроде аналогичная проблема есть, или я ошибаюсь?
Andrey
он не строит дерево по методам и хваостам
прям точно-точно? https://github.com/buaazp/fasthttprouter/blob/28db72dff5a1512dab256b4b7f85c5aa8c36cf73/router.go#L187
"Handle registers a new request handle with the given path and method."
Илья
да, он учитывает только префикс тут
Andrey
в коде видно, что для каждого метода отдельное дерево
Илья
метода + префикса
Илья
но не метода + суффикса
Илья
или постфикса
в общем того, что после параметров идет
Andrey
ну. так тут речь про префикс же.
Andrey
Andrey
если это единственные роуты, то не должно
Илья
результат то не меняется -- последнюю крошку в этом роутере придется как параметр обрабатывать в хендлере
Andrey
тогда это ограничение библиотеки. Можно сделать кастомный handler, который в зависимости от url вызывает либо handler1, либо handler2
Илья
можно влепить декоратор для этого
Илья
Kirya
Не нужно будет перебирать потом массив
Kirya
Когда будете итерировать по []А
Kirya
Просто проверяете нужна ли нам эта А if map[a.ID]
Oleg
понял, спасибо за ответы)
Aleksandr
Aleksandr
в слайсе ты будешь перебирать, в мапе не будешь
Andrey
Andrey
тебе нужно смотреть, if a.ID in []int. Нужно либо итерировать по []int каждый раз для этого, либо один раз проитерировать и сделать map[int]bool который будет возвращать true для int которые содержатся в массиве.
Andrey
У этого подхода есть минусы. Если у тебя исходный массив меняется, то надо мапу постоянно переделывать, и тогда это неудачный подход.
lynx
Понял, что имеете ввиду. Но меня не интересует вторичное обращение к массиву. Мне интересно, можно ли как-то более эффективно найти все элементы (ну допустим они сразу будут в принт идти)? Ну т.е. решение в лоб это прогон по каждому элементу A весь массив []int. А можно ли эффективнее это сделать?
Aleksandr
Andrey
Aleksandr
Aleksandr
Ты сделай как ты это видишь на play.golang, и это уже рассмотрим с т.з. эффективности
lynx