Мерль
Мерль
В архиве
Anonymous
мне nano норм
Мерль
#web #buffalo
Вышла версия 0.8.0 веб-фреймворка Buffalo.
Из основного: шаблонный движок Plush теперь будет по-умолчанию, упаковщик статики go.rice заменен на gobuffalo/packr
https://blog.gobuffalo.io/buffalo-v0-8-0-released-33f1786eadf
igor
igor
смотришь на доки, все вроде супер
Kirill
нормальная штука
igor
только как будто они из него джангу очередную лепят :)
igor
от шаблонов в стиле Go вон отходят...
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
смешной вопрос. А можно ли вообще в go иметь короткие функции(в смысле количества строк). Походив по гитхабу да и по стандартной библиотеке, я понял что 50-100 строчные функции это норма. Или есть какие примеры проектов где все функции коротенькие-коротенькие?
Kirill
один вопрос — зачем?
Anonymous
человек просто не видел длинные функции
Kirill
это понятно, но зачем?
Anonymous
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Чтобы легко помещались в экран и за один взгляд было полностью понятно, что она делает.
Мерль
Anonymous
у меня 53 строки вмещается на экран
Aleksandr
Kirill
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Мерль
Мерль
Albert
нечего разбивать без надобности на мелкие функции, лапшекод потом еще тяжеле читать)
Albert
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Тоже верно. Но функции в 200 строк это уже жесточайшая лапша
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
А пайплайны писать не делая функцию длинной как то не получается
Kirill
Anonymous
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
Aleksandr
ainu
ainu
map[string]string тоже
ainu
вообще желательно полную json с пометками - где могут появится другие поля а где нет
engelbart
А что за пометки?
ainu
ну примечания от тебя
ainu
что фиксированно, а что нет
ainu
Если полностью меняется - то можно через rawmessage поэлементно распарсивать
ainu
геморройно но возможно
ainu
Хотя погоди. У тебя схема по структуре а сам файл описываетс схемой
ainu
для валидации по схеме есть пэкедж https://github.com/xeipuuv/gojsonschema
ainu
Структуры из схемы не получится. Максимум - изврат в виде interface{}
Daniel
не совсем так
ainu
я бы пробегал по файлу (валидному!), брал rawmessage, затем в зависимости от типа обрабатывал и складывал в разные структуры или мапы
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
только оно не счастье, а говноедство
Anonymous
if(JsonNode->type() == "int") { return JsonNode->int() }
Anonymous
так будет не очень эффективно, зато можно любой json обрабатывать и без Interface{}
Daniel
Daniel
как функцию для такого return оформить?