Мерль
Где то видел генератор веб морд из конфигов grpc
Мерль
Ненависть, но очень удобно
Slava
привет. подскажите, пожалуйста, кто работал с NATS, правильно ли я понимаю, что если я паблишу сообщение и нет ни одного подписчика, то сообщение теряется?
Johan
Подскажите плиз, можно ли в go как-то сравнить, что 2 функции одинаковые? нужно в тестах проверить, что возвращаемая функция соответствует
Daniel
а?!
Daniel
что значит - одинаковые функции?
Johan
func Foo() { return true }
func Bar() { return Foo }
Bar() == Foo
Daniel
а что в них одинакового?
Johan
тело функции
Daniel
так разное же
Johan
Bar() возвращает Foo
Johan
ну т.е. логически Bar() == Foo, потому что Bar возвращает Foo
но go так сравнивать не может, а нужно как-то убедиться, что они равны
Daniel
так они не тождественны
Daniel
они эквивалентны
Billyfbrain
Логичнее результат сравнивать же
Daniel
но как об этом узнать-то?
Daniel
эквивалентность вообще штука тонкая
Daniel
в терминах go невыразимая, насколько я понимаю
Johan
Vasily, результат выполнения Foo? он может быть одинаковым, хотя логика в функциях может быть разной
Johan
Daniel, я правильно понимаю, что в go невозможно убедиться, что Bar() возвращает функцию Foo ?
Daniel
отрефлексировать это невозможно
Daniel
насколько я знаю
Johan
можно как-то альтернативно проверить в тестах?
Daniel
так а что проверить-то?
Daniel
вы можете формализовать?
Никита
если функции принимают int32, то прогнать их на интервале [-2147483648, 2147483647]
😊
Johan
функция сложная, с зависимостями, в тестах как раз надо исключить зависимости
спасибо за ответы)
Johan
вроде нашел решение:
runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name()
возвращает путь до функции
Johan
если вместо fn подставить соответственно Bar() и Foo, то работает
Daniel
а!
Daniel
вот видите, если условие формализовать - всегда найдется ответ
MXLTN
Как-то недавно кто-то упоминал решение для открытия страниц с js
MXLTN
Курл не даёт контента который подгружается js
MXLTN
Можете напомнить плиз как называется инструмент ю
MXLTN
?
Constantine️
фантом
Constantine️
силениум
Constantine️
зомби
Anonymous
MXLTN
Спасибо
Anonymous
эх, спят все 😶
Slava
никто не спит вроде
Slava
я тут щас beego смотрю, а что в нём было такого плохого, напомните?
Slach
Народ, а вот эту либу https://github.com/moovweb/rubex
кто то реально использует??
насколько оно быстрое???
у меня в целом очень простое сравнение
мне надо проверять что строка соответсвует шаблону cd[0-9]+
ну вот и вопрос, а надо ли мне regexp тащить такой жирный в проект? или нет?
Slach
может это как то можно без regexp ?
Мерль
Мерль
Slach
потому что там под капотом Cишная либа, которую надо тянуть как зависимость
Мерль
Мерль
Будет очень быстро
Anonymous
если только одна простая проверка, то регэкспы медленее посимвольной проверки строки
Slach
даже на стандартном пакете regexp ?
Anonymous
сначала regexp должен скомпилиться и так же посимвольно всё проверить
Мерль
Anonymous
Вызовы из сишных либ тоже добавляют большие задержки, для лёгких функций они не эффективны
Slach
Можно вообще без него
ну вот как??
в смысле посимвольная процерка как правильнее реализовать?
ну чето у меня не получается =)
все время пытаюсь питонячий код смастырить
Хотя наверное вот так будет лучше всего
https://play.golang.org/p/Z-i6PPCVKQ
спасибо
Slach
а вот еще поясните за package
я првильно понимаю
что
для готовых бинарников использую
package main
и внутри
func main()
но при этом если мне надо часть кода вынести в отдельный файл и подключить его?
как это делать?
тоже указать package main
но просто не указывать func main ?
ну не городить же "отдельную либу" на github???
Slach
или надо все таки сделать
"подкаталог"
с другим package ??
и туда вынести библиотечный код?
Daniel
Оба варианта валидны
Daniel
И используются для разного
Daniel
Но простейший случай - другой файл, package main, без функции main - она уже определена в первом файле
Slach
ну у меня цель
сделать
некий демон на http
с минимальным кол-вом зависимостей
т.е. код который пишу я не предполагает быть потом "библиотечным"
мне просто хочется его как то разбить код на составляющие
на несколько файлов
но при этом хочется чтобы при чтении кода мне не надо было думать
" откуда взялась эта переменная в main.go ?"
Slach
хотя конечно IDE помогает и нормально резолвит это дело до определения
Constantine️
ты по голангу готур хотя бы прошёл?
Roman
Slach
gotour прошел
вот повторно пытаюсь для себя все по полочкам разложить
вот поясните пожалуйста мне за slice и map ??
какую структуру лучше всего использовать если есть некоторое динамическое множество элементов и хочется быстро проверить вхождение значения в это множество?
при этом хочется также обойти это множество в порядке добавления новых элементов множества
у меня в голове почему то рисуется две структуры
[]string
и
map[string]bool
первая через append добавляет элементы
и потом по ней можно через range пройтись
вторая просто через := true
позволяет быстро проверить вхождение в множество
if _, is_exists := my_map[key]; is_exists {
// тут код
}
я в првильном направлении мыслю?
или есть уже какие то библиотеки которые аналог Ptyhon Lists или Python OrderedDict реализовли? если да то какие порекомендуете?
Roman
if val, ok := dict["foo"]; ok {
//do something here
}
Roman
c мапами можно так
Roman
мапы быстрее массивов
Slava
смотря на каком масштабе =)
Roman
разве?
Roman
время доступа к мапе же O(1)
Slach
ну я понимаю что for по слайсу медленнее чем достать элемент из мапы
но мапа не упорядоченная
а мне надо чтобы и упорядочено было
и чтобы проверка на вхождение в множество была быстрая
у меня масштаб небольшой, 40-50 элементов
Slava
это амартизированное время на больших объёмах данных
Slava
OrderedDict в питоне это обычный map + linked list, по скорости так себе
Slava
если нужно часто искать, то наверное map будет лучше, если кол-во элементов больше 16
Slach
больше колво элементов больше 50
Roman
https://golang.org/src/runtime/hashmap.go