
Alexander
29.08.2018
15:59:19
А зачем тогда принялись v.2 обсуждать?

Alexander
29.08.2018
15:59:40

Roman
29.08.2018
15:59:50

Никита
29.08.2018
16:00:09

Google

Roman
29.08.2018
16:00:17
но пипл не догоняет что ломать экосистему в долгосрочной перспективе это опасно

Alexander
29.08.2018
16:00:20

Alexander
29.08.2018
16:00:28

Никита
29.08.2018
16:00:40
ВСЁ
Ну конкретно. В чем магия имплементации слайсов и мапы?
Не ну то что мы подсовываем тип как параметр при создании слайса, это да, интересно)
Но в целом, ради чего там ломать совместимость?

Roman
29.08.2018
16:01:25
я вот например являюсь автором опен сорсной библиотеки.. и что мне потом поддерживать несовместимые меж собой Go 1 и Go 2? ну нахер, я перейду тогда на Go 2 и тем самым пошлю своих собратьев, которые по определённым причинам не могут ещё перейти на Go 2
ещё раз: не повторяйте ошибки питона, помните что у нас только-что зародилась прекрасная экосистема, которая может быть уничтожена потому-что некоторым захотелось чуток нового сахара

Jentry
29.08.2018
16:01:41

Daniel
29.08.2018
16:02:51
коллеги, большая часть проблем питона 2/3 была связана с тем, что на стороне пользователя тоже нужны либы
у нас это не так, у нас пользователь может продолжать пользоваться

Roman
29.08.2018
16:07:36
у меня нет проблем с тем чтоб го развивался хоть до 1.50

Alexander
29.08.2018
16:08:37
или до 1.777 - козырно выглядит :)

Google

Roman
29.08.2018
16:09:18
однако они могут из маркетинговых соображений перейти на 2.x потому-что люди твари нерациональные и хотят видеть major version чтоб им не казалось что язык стоит на месте..
human society is as always pretty f*cked-up
помоему Russ говорил что Go 2.x скорее всего будет Go 1.15
предлагаю им ввести названия Build'ов
Go 1.11 Goofy Gopher
Go 1.12 Guilty Gopher
Go 1.13 Green Gopher

Jentry
29.08.2018
16:14:07

Roman
29.08.2018
16:15:34

Jentry
29.08.2018
16:17:05


Pawel
29.08.2018
16:17:56
у меня есть структура с 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
29.08.2018
16:19:59

Roman
29.08.2018
16:21:54

Aleksandr
29.08.2018
16:22:49

Jentry
29.08.2018
16:22:58

Roman
29.08.2018
16:24:27

Pawel
29.08.2018
16:28:14

Aleksandr
29.08.2018
16:29:33

Vladislav
29.08.2018
16:33:49

Roman
29.08.2018
16:50:28

Roman
29.08.2018
16:55:24

Artem
29.08.2018
17:03:22
всмсл?
Это он о том, что пока они сами не сказали, что придерживаются семвер, они могут творить что душе угодно

Google

Alexander
29.08.2018
17:03:35

Daniel
29.08.2018
17:03:42

Roman
29.08.2018
17:04:53

Roman
29.08.2018
17:05:28

Artem
29.08.2018
17:06:31

Roman
29.08.2018
17:06:34

Alexander
29.08.2018
17:07:57

Roman
29.08.2018
17:08:17

Harry
29.08.2018
17:08:29
пасаны, через r.URL.Query() же нельзя получить POST данные?

Roman
29.08.2018
17:08:46

Daniel
29.08.2018
17:09:50

Roman
29.08.2018
17:11:28
А вот скажите, могу ли я сделать свою реализацию мапы так, что сторонний код мог ее использовать?

Harry
29.08.2018
17:11:34
нет, конечно
крутяк. просто в книге по которой изучаю голанг, чел делает POST метод создания документа и берет данные через URL.Query()

Alexander
29.08.2018
17:13:14

Aleksandr
29.08.2018
17:15:14
Формировать можно, и.к. они одного формата

Harry
29.08.2018
17:15:41

Aleksandr
29.08.2018
17:16:25
Из кода следует, что он берет данные из query string

Alexander
29.08.2018
17:16:55
Так там ни до какого POST еще ничего не дошло.

Harry
29.08.2018
17:17:43

Google

Harry
29.08.2018
17:18:31
дальше он указывает в роутере Methods("POST") для этой функции. это ж бессмыслица

Alexander
29.08.2018
17:19:53
А! Это он на сервере разрешил метод POST. Блин, я же не телепат :)

Harry
29.08.2018
17:21:59
ок. перечитаю. походу чет недопонял

Alexander
29.08.2018
17:22:08
угу, перечитай там внимательно


Z10n1k
29.08.2018
17:28:28
Народ, а кто-нибудь работал с 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
Может я как-то нетак понимаю?) Как вообще решаются подобные случаи?


Alexander
29.08.2018
17:33:59
Народ, а кто-нибудь работал с 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, если именно строка нужна в итоге

Admin
ERROR: S client not available

Z10n1k
29.08.2018
17:35:45
@aadz69 Так в том-то и дело, что я не могу даже получить результат. Я хочу что бы не зависимо от того что будет возвращаться в запросе был стринг. Но что бы получить стринг, нужно впринципе получить значение. pgx мне этого не даёт делать, он требует что бы передаваемый в dst указатель был конкретного типа на сколько я понял.

Alexander
29.08.2018
17:37:43
да. поэтому надо переменную для результата объявить, как int и потом ее уже конвертировать в строку

Z10n1k
29.08.2018
17:39:32
Alexander Так может быть и не int в ответе, а например float. И тогда я получаю например:
can't scan into dest[0]: cannot assign 485759.95754787955 into *int

ainu
29.08.2018
17:45:46
https://twitter.com/golang/status/1034471897948454912?s=19
Кажется, генерики
(за это слово тут банят или в соседнем чате?)

Alexander
29.08.2018
17:48:10
тут :)

Michael
29.08.2018
17:49:50


Z10n1k
29.08.2018
17:51:11
Michael да Постгрес. Это понятно что можно на уровне запроса закастить. Но хочется без таких "костылей".

Michael
29.08.2018
17:53:09
Или касти к строке при выборке и читай потом свою строку

Google

Z10n1k
29.08.2018
18:01:24
Michael Это решит проблему конечно, но меня не покидает чувство, что это костыль ) ИМХО Было бы правильно уметь обрабатывать типы возвращаемых значений без участия запроса. Ведь запросы может и не разработчик писать например.
Конечное решение пока крайне ужасное, через Query. Там не важно какой тип. Просто в слайсе все значения конкретных типов:
rows, errQuery := conn.Pool.Query(*qObject.Query)
...
rows.Next()
valueRaw, errValue := rows.Values()
...
value := fmt.Sprintf("%v", valueRaw[0])

Alexey
29.08.2018
18:05:21
там где не хейтят за слово которое нельзя произносить? )

Daniel
29.08.2018
18:05:35
в обоих
и банят не за слово, а за попытку навязать его обмусоливание

Alexander
29.08.2018
18:06:24
надо для этого термина просто какое-то кодовое слово придумать, чтобы его не называть, а обсуждать проблему при админах... Типа, дети наркоту литературой, вроде, называют... :)

Daniel
29.08.2018
18:06:48
да обсуждайте сколько хотите

Alexander
29.08.2018
18:07:23
А я не знаю, чего обсуждать. Я как-то и без этого слова в языке не не страдаю, вроде бы
Просто те, кто тоже не страдает, им и пофиг. Но есть страдальцы, что же поделаешь?

Alexey
29.08.2018
18:08:37
я страдаю. но мне очень понравился дизайн. фактически могут завести тайпклассы.

Alexander
29.08.2018
18:09:18
А почему тогда сразу не юзать C++? Там все есть, что надо и не надо

Daniel
29.08.2018
18:09:20

Alexey
29.08.2018
18:09:33
если бы ко всем плюсам го добавить возможность решать ежедневные задачи без кодогенерации было бы очень круто

Daniel
29.08.2018
18:09:34

Anatoly
29.08.2018
18:10:11

Alexey
29.08.2018
18:10:33
да мы с тобой уже обсуждали. я не буду снова. тебе лень или ты предложишь кодогенерацию.

Daniel
29.08.2018
18:10:53
обсуждали

Alexander
29.08.2018
18:11:13
Кстати, в С++ можно больше половины всех этих прелестей не использовать, а говнокодить не хуже других... Только проблема чужой код читать, где больше половины этих фич используется как раз. А в древности народ вообще на С писал, и хорошо получалось у многих...

Daniel
29.08.2018
18:11:14
и, подумав, я решил, что тебе не генерики нужны, а типсуммы
я прав?