.
Нет ну обратная совместимость скорее всего остаётся
.
В Го вроде как нет ничего фундаментно плохого/неправильного, ради чего ломали бы обратную совместимость
Roman
она должна оставаться, ради сохранения прекрасной экосистемы.
и этого можно добиться. Генерики, модули и дополнительные механизмы обработки ошибок могут лечь поверх Go1, вроде Russ Cox об этом и говорил что не будет релиза "Go 2.0", будет постепенное добавление новых фич в Go 1
Roman
Go 1 не настолько у€бищный чтобы нам прям нужен был новый язык
aadz
А зачем тогда принялись v.2 обсуждать?
саша
.
Roman
но пипл не догоняет что ломать экосистему в долгосрочной перспективе это опасно
саша
aadz
.
ВСЁ
Ну конкретно. В чем магия имплементации слайсов и мапы?
.
Не ну то что мы подсовываем тип как параметр при создании слайса, это да, интересно)
.
Но в целом, ради чего там ломать совместимость?
Roman
я вот например являюсь автором опен сорсной библиотеки.. и что мне потом поддерживать несовместимые меж собой Go 1 и Go 2? ну нахер, я перейду тогда на Go 2 и тем самым пошлю своих собратьев, которые по определённым причинам не могут ещё перейти на Go 2
ещё раз: не повторяйте ошибки питона, помните что у нас только-что зародилась прекрасная экосистема, которая может быть уничтожена потому-что некоторым захотелось чуток нового сахара
Daniel
коллеги, большая часть проблем питона 2/3 была связана с тем, что на стороне пользователя тоже нужны либы
Daniel
у нас это не так, у нас пользователь может продолжать пользоваться
Roman
у меня нет проблем с тем чтоб го развивался хоть до 1.50
aadz
или до 1.777 - козырно выглядит :)
Roman
однако они могут из маркетинговых соображений перейти на 2.x потому-что люди твари нерациональные и хотят видеть major version чтоб им не казалось что язык стоит на месте..
Roman
human society is as always pretty f*cked-up
Roman
помоему Russ говорил что Go 2.x скорее всего будет Go 1.15
Roman
предлагаю им ввести названия Build'ов
Go 1.11 Goofy Gopher
Go 1.12 Guilty Gopher
Go 1.13 Green Gopher
Je
Je
Pawel
у меня есть структура с n полями, сериализуемая в json. Мне нужно ее маршалить в json вида {"@type": "myType", ...other fields...}
то есть инжектить на стадии маршалинга поле @type с заданным значением. Учитывая что в полях могут быть подобные же структуры, куда тоже надо инжектить тип, надо реализовать кастомным маршалером. Но самый просто вариант - смаршалить структуру, а потом в полученные байты запихнуть еще одно поле - не работает, т.к. кастомный маршалер логично вызывается циклически.
Есть какое-то простое решение, которое мне на ум не пришло? (под простым решением я не имею в виду вручную маршалить всю структуру)
у меня сложилось впечатление, что тебе нужно просто парсить json в функциональном стиле, согласно концепции JsonValue - типа-суммы, в который укладывается любое json значение.
type Json = JString of string
| JNumber of float
| JBool of bool
| JNull
| JList of Json list
| JObject of Map<string, Json>
Я не знаю какая либа в голанге это делает, но думаю что-то есть. Вот примерно такая (elm) https://package.elm-lang.org/packages/1602/json-value/latest/Json-Value
Pawel
Vladislav
Aleksandr
Pawel
я про маршалинг, не про анмаршалинг
а, ну вот имхо как-то не тривиально сконвертить гошную структуру данных в JsonValue проще, чем кастомный MarshalJSON() ([]byte, error)
Aleksandr
Vladislav
Roman
Roman
Artem
всмсл?
Это он о том, что пока они сами не сказали, что придерживаются семвер, они могут творить что душе угодно
Daniel
Roman
Roman
Roman
aadz
Roman
Anonymous
пасаны, через r.URL.Query() же нельзя получить POST данные?
Roman
Daniel
Roman
А вот скажите, могу ли я сделать свою реализацию мапы так, что сторонний код мог ее использовать?
Anonymous
нет, конечно
крутяк. просто в книге по которой изучаю голанг, чел делает POST метод создания документа и берет данные через URL.Query()
aadz
Aleksandr
Aleksandr
Формировать можно, и.к. они одного формата
Anonymous
Aleksandr
Из кода следует, что он берет данные из query string
aadz
Так там ни до какого POST еще ничего не дошло.
Anonymous
Anonymous
дальше он указывает в роутере Methods("POST") для этой функции. это ж бессмыслица
aadz
aadz
А! Это он на сервере разрешил метод POST. Блин, я же не телепат :)
Anonymous
ок. перечитаю. походу чет недопонял
aadz
aadz
угу, перечитай там внимательно
Saff
Народ, а кто-нибудь работал с pgx(https://github.com/jackc/pgx)? Пишу относительно недавно, но словил непонятки. Кейс следующий:
Предположим я делаю запрос в котором вернётся точно 1 результат. COUNT/SUMM как вариант. Результат может быть 2х типов float64/int32. Пытался использовать QueryRow(q).Sccan(&value). И вот вопрос:
Если я точно не знаю возвращаемый запросом тип переменной, но при этом меня устроил бы string, как это сделать?
Судя по документации на интерфейс Scan, он должен на основании переменной что я передал, кастануть их из формата используемой БД в тот, что я передал. На деле же pgx требует конкретный тип который возвращает БД. То есть я не могу например сделать так:
var v string
errQuery := conn.Pool.QueryRow("SELECT COUNT(*) FROM mytable").Scan(&v)
Ругается на: can't scan into dest[0]: cannot assign 7 into *string
Может я как-то нетак понимаю?) Как вообще решаются подобные случаи?
aadz
Народ, а кто-нибудь работал с pgx(https://github.com/jackc/pgx)? Пишу относительно недавно, но словил непонятки. Кейс следующий:
Предположим я делаю запрос в котором вернётся точно 1 результат. COUNT/SUMM как вариант. Результат может быть 2х типов float64/int32. Пытался использовать QueryRow(q).Sccan(&value). И вот вопрос:
Если я точно не знаю возвращаемый запросом тип переменной, но при этом меня устроил бы string, как это сделать?
Судя по документации на интерфейс Scan, он должен на основании переменной что я передал, кастануть их из формата используемой БД в тот, что я передал. На деле же pgx требует конкретный тип который возвращает БД. То есть я не могу например сделать так:
var v string
errQuery := conn.Pool.QueryRow("SELECT COUNT(*) FROM mytable").Scan(&v)
Ругается на: can't scan into dest[0]: cannot assign 7 into *string
Может я как-то нетак понимаю?) Как вообще решаются подобные случаи?
Он возвращает то, что ему кажется удобным, исходя их типа поля или возвращаемого значения. Придется делать strconv.Itoa, если именно строка нужна в итоге
Saff
@aadz69 Так в том-то и дело, что я не могу даже получить результат. Я хочу что бы не зависимо от того что будет возвращаться в запросе был стринг. Но что бы получить стринг, нужно впринципе получить значение. pgx мне этого не даёт делать, он требует что бы передаваемый в dst указатель был конкретного типа на сколько я понял.
aadz
да. поэтому надо переменную для результата объявить, как int и потом ее уже конвертировать в строку
Saff
Alexander Так может быть и не int в ответе, а например float. И тогда я получаю например:
can't scan into dest[0]: cannot assign 485759.95754787955 into *int
ainu
https://twitter.com/golang/status/1034471897948454912?s=19
ainu
Кажется, генерики
ainu
(за это слово тут банят или в соседнем чате?)
aadz
тут :)
Michael
Saff
Michael да Постгрес. Это понятно что можно на уровне запроса закастить. Но хочется без таких "костылей".
Michael
Michael
Или касти к строке при выборке и читай потом свою строку