Мерль
В архиве
Anonymous
мне nano норм
Мерль
#web #buffalo Вышла версия 0.8.0 веб-фреймворка Buffalo. Из основного: шаблонный движок Plush теперь будет по-умолчанию, упаковщик статики go.rice заменен на gobuffalo/packr https://blog.gobuffalo.io/buffalo-v0-8-0-released-33f1786eadf
igor
смотришь на доки, все вроде супер
Kirill
нормальная штука
igor
только как будто они из него джангу очередную лепят :)
igor
от шаблонов в стиле Go вон отходят...
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
смешной вопрос. А можно ли вообще в go иметь короткие функции(в смысле количества строк). Походив по гитхабу да и по стандартной библиотеке, я понял что 50-100 строчные функции это норма. Или есть какие примеры проектов где все функции коротенькие-коротенькие?
Kirill
один вопрос — зачем?
Anonymous
человек просто не видел длинные функции
Kirill
это понятно, но зачем?
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Чтобы легко помещались в экран и за один взгляд было полностью понятно, что она делает.
Anonymous
у меня 53 строки вмещается на экран
Kirill
Чтобы легко помещались в экран и за один взгляд было полностью понятно, что она делает.
может, стоит задуматься и попробовать программировать не на нокле 1100?
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Ну в норме они должны быть короткими, другой момент, что в Go почти невозможно писать компактно
Вот я именно про то же. Думал может есть какие примеры как компактные функции писать
Мерль
Albert
нечего разбивать без надобности на мелкие функции, лапшекод потом еще тяжеле читать)
Albert
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Тоже верно. Но функции в 200 строк это уже жесточайшая лапша
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
А пайплайны писать не делая функцию длинной как то не получается
Anonymous
Вот он научит тебя писать компактно 😊
Мерль
Grender, a #golang package for rendering JSON/XML data and HTML templates : https://github.com/dannyvankooten/grender
engelbart
наследование шаблонов мне нравится
Alex
Разница в этих двух реализациях? Может быть, во втором случае во время ожидания, управление может передаться другой горутине или я ошибаюсь? 1) for { ... time.Sleep(5 * time.Second) } 2) for { ... <-time.After(5 * time.Second) }
Daniel
в обоих случаях может
Alex
Т.е. если не использовать функционал каналов - то они тождественны?
engelbart
подскажите. а если у меня есть схема json, что то вроде { "anyOf": [ { "type": "object", "properties": { "timestamp": { "type": "string" }, "external_id": { "type": "string" ... 1. могу я её как то валидировать? 2. могу получать go-ные структуры из схемы (как из примера пакета я видел утилиты но не из схемы)
Alexey
Недавно смотрел реализацию fifo, очень смутили вот эти 2 строчки: q.tail.next = n q.tail = n Разве вторая строчка не присвоит адрес переменной n? Какой тогда смысл в 1 строке?
Alexey
Как это работает?
Daniel
Т.е. если не использовать функционал каналов - то они тождественны?
второй зря использует пару мутексов, что внутри канала
ainu
map[string]string тоже
ainu
вообще желательно полную json с пометками - где могут появится другие поля а где нет
engelbart
А что за пометки?
ainu
ну примечания от тебя
ainu
что фиксированно, а что нет
ainu
Если полностью меняется - то можно через rawmessage поэлементно распарсивать
ainu
геморройно но возможно
ainu
Хотя погоди. У тебя схема по структуре а сам файл описываетс схемой
ainu
для валидации по схеме есть пэкедж https://github.com/xeipuuv/gojsonschema
ainu
Структуры из схемы не получится. Максимум - изврат в виде interface{}
Daniel
не совсем так
ainu
я бы пробегал по файлу (валидному!), брал rawmessage, затем в зависимости от типа обрабатывал и складывал в разные структуры или мапы
ainu
не совсем так
Делись инфой=) Самому тоже надо.
Daniel
вариантов валидных, без interface{}, два
Daniel
1. создаем универсальную структуру, включающую в себя все возможные поля, и анмаршалим в нее
Daniel
2. создаем ту же самую структуру, но к ней приклеиваем кастомный анмаршалер, сеттеры-геттеры и поле "мой реальный тип"
Daniel
я всегда хожу путем 1
Daniel
потому, что 2 - это ява какая-то
ainu
а если один из типов - "перечень объектов"?
Alexey
такой себе вариант
ainu
Вот такое как разрулить?
ainu
https://pastebin.com/8KJxpXAX
ainu
на кавычки не обращайте внимания, на коленке придумал
ainu
Да что далеко ходить, вот: { list: [1,3,4,"bingo",true] }
Daniel
вот это разрулить нельзя никак
Anonymous
разве в go нет библиотек для работы с json по типу как это сделано в C?
Daniel
а?!
Daniel
как это сделано в с?
Daniel
*void?
Anonymous
для каждой ноды или значения тип JsonNode
Daniel
да пожалуйста
Anonymous
JsonNode->isArray() jsonNode->childs()
Daniel
анмаршальте в map[string]interface{}, и будет вам счастье
Daniel
только оно не счастье, а говноедство
Daniel
JsonNode->isArray() jsonNode->childs()
динамическая типизация как она есть. ненавижу :)
Anonymous
if(JsonNode->type() == "int") { return JsonNode->int() }
Anonymous
так будет не очень эффективно, зато можно любой json обрабатывать и без Interface{}
Daniel
if(JsonNode->type() == "int") { return JsonNode->int() }
куда это return можно сделать-то?
Daniel
как функцию для такого return оформить?