Anonymous
чего-нибудь человеческое бы
Andrey
чего-нибудь человеческое бы
Так иди посимвольно и в зависимости от ключа включай разные парсеры ключей.
Anonymous
гемор, я думал на готовенькое сесть чтонить
Kirill
свари сосиску
Kirill
ладно, слишком толсто :D
Cat
чего-нибудь человеческое бы
по-моему это проще, чем писать посимвольный парсер
Cat
но тут уж на вкус и цвет
Anonymous
злые вы.
Andrey
по-моему это проще, чем писать посимвольный парсер
Да куда уж проще. Положи в мапу ключ, а в значение функцию, которая разберёт параметры. Никакая либа тебе не поможет.
Vadim
ладно, слишком толсто :D
Под таблетками самое то)
Cat
./smth -a 1 2 3 -b 4 5 6
Cat
если не распарсилось в int, то ключ?
Cat
а если строковое значение?
Kirill
если -{буква} - ключ, чо
Andrey
Твои -a и -b будут переключать парсер аргументов. А как только - попадется, будет его отключать и переключать на парсер ключей.
Cat
>если -{буква} - ключ, чо так это вообще просто
Cat
.split("-")
Cat
в общем, решение зависит от
Nikita
А в go нет какой-нибудь готовой удобной библиотеки для этого?
Andrey
Нет, сплит не поможет. Этот - может быть внутри аргументов, которые внутри кавычек например.
Andrey
Нужно разбирать и накапливать посимвольно.
Kirill
split(" -")
это может быть внутри аргументов
Andrey
split(" -")
Ну попробуй такое разобрать -param1 "10 - 20"
Cat
ну шо вы триггеритесь
Cat
конеш надо использовать полноценный парсер грамматик
Andrey
ну шо вы триггеритесь
Я на прошлой неделе именно это делал... Делай сам. Нет готовых либ, которые как-то облегчат твою жизнь.
Andrey
А если есть - запаришься адаптировать под свой кейс.
Nikita
Серьёзно? Я просто на питоне пишу, так мимо подходил.
Nikita
Отсутствие инструментов для работы с аругементами командной строки это как-то очнеь странно, особенно для языка которому много лет.
Sergei
иначе никак, это го.
Cat
но вообще, flag с отсутвием long options придумали странные люди
Nikita
мы про парсеры грамматик
Изначально речь вроде как про немного другое шла t.me/gogolang/117343
Nikita
Ага.
Cat
ссылку, на либу или whatever
Nikita
https://docs.python.org/3.6/howto/argparse.html
Nikita
Помимо стандартной библиотеки есть еще всякие обертки для упрощения жизни.
Cat
https://docs.python.org/3.6/howto/argparse.html
пролистал всё, не увидел кейс -k 1 2 3
Nikita
Вот ссылка на конкретную вещь для этого, вместо базового how-to https://docs.python.org/3.6/library/argparse.html#nargs
Cat
так-то -k 1 -k 2 -k 3 -> "k" : [1, 2, 3] сделать можно
Sergei
я придумал! нужно из гошки вызывать питон.
Andrey
Ну тогда нужно заимплииентить и выложить, если они там фееричный синтаксис уже придумали для покрытия всех вариантов аргументов.
Cat
есть такое
Cat
https://github.com/alexflint/go-arg
Cat
а, нет, там это по-другому сделано
Andrey
а, нет, там это по-другому сделано
Говорю тебе, дольше будешь выбирать.
Cat
я-то не буду)
Anonymous
😢
Dmitry
у меня вопрос по использованию структуры с массивом строк в качестве ключа для мапы. за счет чего это выходит быстрее чем мапы с ключом строкой или интом и хешфункцией? https://github.com/RedSkotina/xrich/blob/develop/chain_test.go
Kirill
а покажи результаты бенча
Kirill
Dmitry
Dmitry
Kirill
скорее всего, _typ.alg.hash быстрее отрабатывает 🤔
Kirill
а ты уверен, что бенчмарк не заоптимизировался?
Kirill
и зачем if ok { continue } ?
Dmitry
чтобы оптимизатор не выкинул возврат результата
Dmitry
я не проверял, просто на всякий случай
Kirill
на всякий случай запихни-ка ok в глобальную область видимости и заэкспортируй
Kirill
а потом - твои функции хеширования довольно дорогие
Dmitry
ну какие есть
Dmitry
я лучше не придумал для строк
Kirill
иногда бывает такое, что лучше строки не хешировать %)
Aliaksandr
а как распарсить jsonl (json Lines) используя стандартную либу?
В стандартной либе вроде можно использовать json.Reader . Но лучше используйте fastjson.Scanner - https://godoc.org/github.com/valyala/fastjson#Scanner
Dmitry
на всякий случай запихни-ка ok в глобальную область видимости и заэкспортируй
а как это сделать не засоряя область видимости пакета?
Kirill
а как это сделать не засоряя область видимости пакета?
оно должно не засорять при этом область видимости. переменная создается в тестах, которые по тэгу собираются
Kirill
потому что :=
Dmitry
ну тоесть вернуться к старому варианту надо
Kirill
нужно было сделать за функциями var HasKey bool и юзать =
Dmitry
нужно было сделать за функциями var HasKey bool и юзать =
а есть смысл пилит кастомную хешмапу с своей функцией по типу https://flaviocopes.com/golang-data-structure-hashtable/ ?
Kirill
userspace?