.
Нет ну обратная совместимость скорее всего остаётся
.
В Го вроде как нет ничего фундаментно плохого/неправильного, ради чего ломали бы обратную совместимость
Roman
она должна оставаться, ради сохранения прекрасной экосистемы. и этого можно добиться. Генерики, модули и дополнительные механизмы обработки ошибок могут лечь поверх Go1, вроде Russ Cox об этом и говорил что не будет релиза "Go 2.0", будет постепенное добавление новых фич в Go 1
Roman
Go 1 не настолько у€бищный чтобы нам прям нужен был новый язык
aadz
А зачем тогда принялись v.2 обсуждать?
Roman
А зачем тогда принялись v.2 обсуждать?
потому-что пипл хочет "изменений", это маркетинг... 2.0 звучит лучше чем 1.15
Roman
но пипл не догоняет что ломать экосистему в долгосрочной перспективе это опасно
aadz
потому-что пипл хочет "изменений", это маркетинг... 2.0 звучит лучше чем 1.15
а не похер, как оно звучит? Лишь бы не было войны на самом деле
.
ВСЁ
Ну конкретно. В чем магия имплементации слайсов и мапы?
.
Не ну то что мы подсовываем тип как параметр при создании слайса, это да, интересно)
.
Но в целом, ради чего там ломать совместимость?
Roman
я вот например являюсь автором опен сорсной библиотеки.. и что мне потом поддерживать несовместимые меж собой Go 1 и Go 2? ну нахер, я перейду тогда на Go 2 и тем самым пошлю своих собратьев, которые по определённым причинам не могут ещё перейти на Go 2 ещё раз: не повторяйте ошибки питона, помните что у нас только-что зародилась прекрасная экосистема, которая может быть уничтожена потому-что некоторым захотелось чуток нового сахара
Je
опять всё снова? ну тогда посмотри на Python 2/3, они тоже этого хотели и получили полный пздц
собственно в чем проблема? переход был достаточно гладкий, появились six, feature модули, многие продукты успели сделать совместимость и подготовиться к переходу, python2.7 долгое время продолжает поддерживаться и происходит бэкпорт фичей
Daniel
коллеги, большая часть проблем питона 2/3 была связана с тем, что на стороне пользователя тоже нужны либы
Daniel
у нас это не так, у нас пользователь может продолжать пользоваться
Roman
у нас это не так, у нас пользователь может продолжать пользоваться
если не поломают обратную совместимость. если они её не сломают то нет смысла переименовывать в GO 2.x потому-что это нарушает semantic-versioning где major version это breaking compatibility
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
Roman
Ты сам выдумал смысл мажор версии, в оригинале в faq они пишут иначе https://golang.org/doc/faq#language_changes
https://semver.org/ 1. MAJOR version when you make incompatible API changes, а разработчики Go придерживаются semver
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
Vladislav
https://semver.org/ 1. MAJOR version when you make incompatible API changes, а разработчики Go придерживаются semver
Тут ещё нужно ссылку на то что разработчики придерживаются семвера. Непонятно почему ты так решил.
Roman
а почему-то в своем faq противоречат себе?
впервые в жизни видешь как кто-то себе противоречит?))
Je
впервые в жизни видешь как кто-то себе противоречит?))
Я еще пока не увидел пруфов, что go чему-то там следует, а не вольны воспринимать версии, как им будет удобно
Roman
Тут ещё нужно ссылку на то что разработчики придерживаются семвера. Непонятно почему ты так решил.
ты мне лучше скажи какая серьёзная публичная контора разрабатывающая софт не только для себя да ещё и в опен сорсе - НЕ придерживается semver? начиная с того что ново-внедрённые "модули" основаны на semver и сами версии Go его практически придеживаются с Go 1.0.0 - довольно просто понять что они придеживаются semver.
Pawel
я про маршалинг, не про анмаршалинг
а, ну вот имхо как-то не тривиально сконвертить гошную структуру данных в JsonValue проще, чем кастомный MarshalJSON() ([]byte, error)
Artem
всмсл?
Это он о том, что пока они сами не сказали, что придерживаются семвер, они могут творить что душе угодно
aadz
предлагаю им ввести названия Build'ов Go 1.11 Goofy Gopher Go 1.12 Guilty Gopher Go 1.13 Green Gopher
1.14 Gipsy Gopher 1.15 Gaily Gopher 1.16 Gamely Gopher 1.17 Glibly Gopher 1.18 Grubby Gopher 1.19 Grainy Gopher 1.20 Goodby Gopher
Artem
я буду удивлён если они не по semver методике работают
Они любят изобретать всякие штуки, похожие на существующие, но "типо" новые
Roman
1.14 Gipsy Gopher 1.15 Gaily Gopher 1.16 Gamely Gopher 1.17 Glibly Gopher 1.18 Grubby Gopher 1.19 Grainy Gopher 1.20 Goodby Gopher
1.21 Gopher-600 1.22 Gopher-700 1.23 Gopher-800 1.24 Gopher-900 1.25 Gopher-X 1.26 Liquid Gopher-1000
aadz
1.21 Gopher-600 1.22 Gopher-700 1.23 Gopher-800 1.24 Gopher-900 1.25 Gopher-X 1.26 Liquid Gopher-1000
Ну, цифры не надо. Надо слова: egrep -i '^g.+y$' /usr/share/dict/words выбирай не хочу :)
Anonymous
пасаны, через r.URL.Query() же нельзя получить POST данные?
Roman
А вот скажите, могу ли я сделать свою реализацию мапы так, что сторонний код мог ее использовать?
Anonymous
нет, конечно
крутяк. просто в книге по которой изучаю голанг, чел делает POST метод создания документа и берет данные через URL.Query()
Aleksandr
Формировать можно, и.к. они одного формата
Aleksandr
Из кода следует, что он берет данные из query string
aadz
Так там ни до какого POST еще ничего не дошло.
Anonymous
дальше он указывает в роутере Methods("POST") для этой функции. это ж бессмыслица
aadz
дальше он указывает в роутере Methods("POST") для этой функции. это ж бессмыслица
Нет, все нормально. Поработал с данными и отправил на сервер HTTP методом POST.
aadz
А! Это он на сервере разрешил метод POST. Блин, я же не телепат :)
Anonymous
ок. перечитаю. походу чет недопонял
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
Народ, а кто-нибудь работал с 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 Может я как-то нетак понимаю?) Как вообще решаются подобные случаи?
Постгрес? Можно явно указать тип столбца при выборке и потом делать scan в нужный тип
Saff
Michael да Постгрес. Это понятно что можно на уровне запроса закастить. Но хочется без таких "костылей".
Michael
Или касти к строке при выборке и читай потом свою строку