
Мерлин
28.03.2017
12:30:03
#web #buffalo
Вышла версия 0.8.0 веб-фреймворка Buffalo.
Из основного: шаблонный движок Plush теперь будет по-умолчанию, упаковщик статики go.rice заменен на gobuffalo/packr
https://blog.gobuffalo.io/buffalo-v0-8-0-released-33f1786eadf

Ighar
28.03.2017
12:30:36
смотришь на доки, все вроде супер

Kirill
28.03.2017
12:31:15
нормальная штука

Google

Ighar
28.03.2017
12:31:44
только как будто они из него джангу очередную лепят :)
от шаблонов в стиле Go вон отходят...

vktr
28.03.2017
13:45:37
смешной вопрос. А можно ли вообще в go иметь короткие функции(в смысле количества строк). Походив по гитхабу да и по стандартной библиотеке, я понял что 50-100 строчные функции это норма. Или есть какие примеры проектов где все функции коротенькие-коротенькие?

Kirill
28.03.2017
13:46:32
один вопрос — зачем?

i
28.03.2017
13:46:50
человек просто не видел длинные функции

Kirill
28.03.2017
13:47:16
это понятно, но зачем?

Andrew
28.03.2017
13:47:33

vktr
28.03.2017
13:47:45
Чтобы легко помещались в экран и за один взгляд было полностью понятно, что она делает.

Мерлин
28.03.2017
13:48:35

i
28.03.2017
13:48:48
у меня 53 строки вмещается на экран

Aleksandr
28.03.2017
13:48:53

Kirill
28.03.2017
13:48:58

vktr
28.03.2017
13:49:27

Google

Мерлин
28.03.2017
13:49:51

Альберт
28.03.2017
13:50:11
нечего разбивать без надобности на мелкие функции, лапшекод потом еще тяжеле читать)

vktr
28.03.2017
13:51:11
Тоже верно. Но функции в 200 строк это уже жесточайшая лапша
А пайплайны писать не делая функцию длинной как то не получается

Kirill
28.03.2017
13:52:08

Andrew
28.03.2017
13:54:56
Вот он научит тебя писать компактно ?

Мерлин
28.03.2017
17:03:04
Grender, a #golang package for rendering JSON/XML data and HTML templates :
https://github.com/dannyvankooten/grender

Ivan
28.03.2017
17:25:41
наследование шаблонов мне нравится

Aleksander
29.03.2017
09:11:34
Разница в этих двух реализациях? Может быть, во втором случае во время ожидания, управление может передаться другой горутине или я ошибаюсь?
1) for {
...
time.Sleep(5 * time.Second)
}
2) for {
...
<-time.After(5 * time.Second)
}

Daniel
29.03.2017
09:13:03
в обоих случаях может

Aleksander
29.03.2017
09:14:00
Т.е. если не использовать функционал каналов - то они тождественны?

Ivan
29.03.2017
09:15:04
подскажите. а если у меня есть схема json, что то вроде
{
"anyOf": [
{
"type": "object",
"properties": {
"timestamp": {
"type": "string"
},
"external_id": {
"type": "string"
...
1. могу я её как то валидировать?
2. могу получать go-ные структуры из схемы (как из примера пакета я видел утилиты но не из схемы)

Алексей
29.03.2017
09:38:02
Недавно смотрел реализацию fifo, очень смутили вот эти 2 строчки:
q.tail.next = n
q.tail = n
Разве вторая строчка не присвоит адрес переменной n? Какой тогда смысл в 1 строке?
Как это работает?

Daniel
29.03.2017
09:48:36

Aleksandr
29.03.2017
09:48:38

ainu
29.03.2017
12:06:08
map[string]string тоже
вообще желательно полную json с пометками - где могут появится другие поля а где нет

Google

Ivan
29.03.2017
12:07:47
А что за пометки?

ainu
29.03.2017
12:08:33
ну примечания от тебя
что фиксированно, а что нет
Если полностью меняется - то можно через rawmessage поэлементно распарсивать
геморройно но возможно
Хотя погоди. У тебя схема по структуре а сам файл описываетс схемой
для валидации по схеме есть пэкедж https://github.com/xeipuuv/gojsonschema
Структуры из схемы не получится. Максимум - изврат в виде interface{}

Daniel
29.03.2017
12:16:03
не совсем так

ainu
29.03.2017
12:16:30
я бы пробегал по файлу (валидному!), брал rawmessage, затем в зависимости от типа обрабатывал и складывал в разные структуры или мапы

Daniel
29.03.2017
12:17:42
вариантов валидных, без interface{}, два
1. создаем универсальную структуру, включающую в себя все возможные поля, и анмаршалим в нее
2. создаем ту же самую структуру, но к ней приклеиваем кастомный анмаршалер, сеттеры-геттеры и поле "мой реальный тип"
я всегда хожу путем 1
потому, что 2 - это ява какая-то

ainu
29.03.2017
12:23:40
а если один из типов - "перечень объектов"?

Алексей
29.03.2017
12:24:00
такой себе вариант

ainu
29.03.2017
12:51:27
Вот такое как разрулить?
https://pastebin.com/8KJxpXAX

Google

ainu
29.03.2017
12:52:08
на кавычки не обращайте внимания, на коленке придумал
Да что далеко ходить, вот:
{
list: [1,3,4,"bingo",true]
}

Daniel
29.03.2017
13:13:17
вот это разрулить нельзя никак

i
29.03.2017
13:13:56
разве в go нет библиотек для работы с json по типу как это сделано в C?

Daniel
29.03.2017
13:14:12
а?!
как это сделано в с?
*void?

i
29.03.2017
13:14:46
для каждой ноды или значения тип JsonNode

Daniel
29.03.2017
13:14:50
да пожалуйста

i
29.03.2017
13:15:14
JsonNode->isArray() jsonNode->childs()

Daniel
29.03.2017
13:15:24
анмаршальте в map[string]interface{}, и будет вам счастье
только оно не счастье, а говноедство

i
29.03.2017
13:17:05
if(JsonNode->type() == "int") { return JsonNode->int() }
так будет не очень эффективно, зато можно любой json обрабатывать и без Interface{}

Daniel
29.03.2017
13:18:50
как функцию для такого return оформить?

i
29.03.2017
13:19:47
это псевдокод
там может быть val := JsonNode->int()

Daniel
29.03.2017
13:20:09
ну вот и как его в реальный-то превратить в языке со строгой типизацией?

Google

i
29.03.2017
13:21:42
можно не париться и забить на типы и всё в виде строки представить, оставть только массивы и мапы из дополнительных типов
Думаю, что такая идея имеет право на существование

Daniel
29.03.2017
13:24:38

i
29.03.2017
13:25:15
обрабатывать json не зная его точной структуры

Andrew
29.03.2017
13:25:52
Можно ещё попробовать это:
https://github.com/Jeffail/gabs

Daniel
29.03.2017
13:25:55
а зачем его обрабатывать, не зная его структуры?

Олег
29.03.2017
13:27:47
А почему все сразу отсекают interface{} из вариантов? Тайп-кастами как раз можно разобрать любую структуру, тем более, что соответствие типов Json и go однозначно определено: https://blog.golang.org/json-and-go

Andrew
29.03.2017
13:29:22
можно то можно, просто неудобно

Andrew
29.03.2017
13:29:39
Готовенькое хотят все

Andrew
29.03.2017
13:29:58

Daniel
29.03.2017
13:30:34

Andrew
29.03.2017
13:31:40

Daniel
29.03.2017
13:31:56
у кого?
я вот не продаю
наоборот, сразу кричу - "несите дрова!"