Ilya
Они переписываются?
Ilya
а?!
Ну смотирте, гипотетически. Есть ```type A struct {
Daniel
а в С++, наверное, функция, только я знать этого не желаю
Roman
в С это тоже ни хера не функция
ну да, это вот только C++ видимо такой "прекрасный" в плане абстракций)))
Daniel
ваши представления о прекрасном пугают меня
Ilya
а?!
'''type A struct {
Dmitri
Он все ещё уверен что она делает копию
А потом он получит вот так адрес, потом заппендит что-то к слайсу и вообще охренеет от происходящего)
Daniel
'''type A struct {
давайте сразу в play
Ilya
of
Roman
ну ведь согласитесь это прекрасно когда: a = new Array() c = a[10] может повесить программу на 5 минут, потому-что в реализации перегрузки индексного оператора пойдёт брать этот int по сети и повиснет на await connection 🙃 </sarcasm>
саша
ваши представления о прекрасном пугают меня
а разве есть что-то хорошее во встроенных языковых конструкциях?
Roman
и нехер программисту давать доступ к перегрузке []
Ilya
давайте сразу в play
https://play.golang.org/p/c98JMp-EOih
Darwin
дупликейт же
саша
@nexmean 👆🏻
1) "прекрасно, когда в языке нет контроля за эффектами" 2) ваш пример — это детский сад, а не инженерия, банальное отсутствие хоть какой-то культуры и понимания того, что он делает, у человека, который такое писал
саша
ну и утинная типизация с возможностью перегрузки операторов, абсолютно насрав на исходную его сигнатуру — тоже весело
Roman
1) "прекрасно, когда в языке нет контроля за эффектами" 2) ваш пример — это детский сад, а не инженерия, банальное отсутствие хоть какой-то культуры и понимания того, что он делает, у человека, который такое писал
у [] должно быть только 1 значение. перегрузка функций и операторов это весело, всем рекомендую через это пройти чтоб осознать почему в Go от этого отказались
Ilya
давайте сразу в play
вот как мне лучше сделать такое поведение? Приходит json, структура имеет вложенную структуру (Клиент в заказе). Но в json приходит только айди клиента. Хотел через рефлект проверять тип значение после json.Unmarshal и в зависимости от этого запускать разные sql
Darwin
зачем при этом одинаковые имена в стурктурах которые наследуются?
Ilya
зачем при этом одинаковые имена в стурктурах которые наследуются?
просто в основном там структура клиента со своими полями. А при создании заказа берется только айдишник, поэтому достаточно Client int json:"client"
саша
у [] должно быть только 1 значение. перегрузка функций и операторов это весело, всем рекомендую через это пройти чтоб осознать почему в Go от этого отказались
от этого отказались для того, чтобы студентов лишней фиче не учить, а так те же раст и хаскель спокойно живут с перегрузкой операторов при этом являясь пожалуй одними из самых простых языков для написания системных и, соответственно, прикладных программ
саша
прошу заметить, простых не для изучения, а для написания программ
Алексей
ну ведь согласитесь это прекрасно когда: a = new Array() c = a[10] может повесить программу на 5 минут, потому-что в реализации перегрузки индексного оператора пойдёт брать этот int по сети и повиснет на await connection 🙃 </sarcasm>
Если выпилить из языка все потенциально опасные конструкции, то от языка вообще ничего не останется. Вообще перегрузка операторов - это фича для тех людей, которые знают что делают и понимают последствия своих действий. Плюс существует целый ряд задач, которые крайне уродливо решаются на языке без перегрузки операторов.
Алексей
Хотя стоит заметить, что Go в принципе не для таких задач сделан.
Roman
особенно весело было с такми случаями как: void DoSomething(s &std::string) { // do stuff A } void DoSomething(s const &std::string) { // do stuff B // changed by bugfix commit } помню такую ситуацию, когда эти две реализации были в раздельных файлах и кто-то тупанул и внедрил изменения только в ту функцию которая принимает const &std::string потому-что мы только ей и пользовались, но первая изначально была задумана оригинальным автором "про запас" мол "вдруг пригодится" и да... однажды она пригодилась, потому-что кто-то поменял рабочий тип на мутируемый string и итоге мы поломали прод, потому-что все забыли кроме изначального автора (а он уже свалил из конторы 🙃), что функция перегружена, что баг-фикс был только в одной из вариантов и что передавать ей другой тип было поэтому - небезопасно. Весело короче живётся с перегрузкой
саша
вам повезло, что я не баню за голословные утверждения.
Меня просто текущий проект на голанге вгоняет в дикую депрессию. Не в последнюю очередь из-за того, что проект на голанге.
саша
Но ещё он херого написан и без тестов.
саша
А та часть, которую я дописываю за сеньёром недавно ушедшим в яндекс как раз работает с деньгами пользователей.
Алексей
И тем не менее в Go она присутствует
Daniel
Меня просто текущий проект на голанге вгоняет в дикую депрессию. Не в последнюю очередь из-за того, что проект на голанге.
может - плохо спроектировали? некоторые архитектурные ходы на go очень уродливо выглядят
саша
может - плохо спроектировали? некоторые архитектурные ходы на go очень уродливо выглядят
да нет там проектирования, один сервис на 1к строк с десятком публичны методов и с ещё десятком приватных методов
Alexey
Я видел!
Alexey
В диффе, который его убирал 🙂
Daniel
:)
Roman
Если выпилить из языка все потенциально опасные конструкции, то от языка вообще ничего не останется. Вообще перегрузка операторов - это фича для тех людей, которые знают что делают и понимают последствия своих действий. Плюс существует целый ряд задач, которые крайне уродливо решаются на языке без перегрузки операторов.
все они знают что делают... до поры до времени, а потом забывают, что они там делали, либо просто уходят и на их место становятся люди, которые ничерта о коде не знают))) меняют только одну из функций забыв изменить другие перегруженные и всё вообщенакрывается медным тазом))) перегрузка это многозначность! это прямое нарушение DRY принципа приводящая к порой страшным последствиям
Daniel
а?!
Great
шо?
саша
при чём вызов через точку — куда более мощная многозначность, чем перегрузка оператора
Roman
ну перечисли нам, какие "значения может иметь вызов через точку")
саша
а ещё интерфейсы — тоже многозначность
Daniel
но такая, на втором шаге заканчивается
Zver
ибо, ещё раз: если [] возвращает нам копию, то брать адрес копии не должно давать нам адреса самого инта в слайсе
[] возращает и не копию и не указатель, а переменную и дальше мы можем либо получить указатель от переменной или извлечь значение.
саша
ну перечисли нам, какие "значения может иметь вызов через точку")
pook.BlaBla(fack) — этот код в голанге может сделать что угодно, чем это лучше чем pook >> fack совершенно неясно
Eugenii
да нет там проектирования, один сервис на 1к строк с десятком публичны методов и с ещё десятком приватных методов
скажите, а что вам мешает переписать его на что то другое, раз с го так несложилось?
саша
я вместо этого собираюсь работу менять вместе со стеком
Eugenii
зачем проект весь, перепешите один сервис у которого 1к и нет архитектуры, зато десяток публичных методов
Zver
ну да, я так и сказал, что это не функция в стиле C++, это language construct
Ну так и не написано нигде, что это функция.
Great
а ты перепиши на го
Grom
привет, подскажите, проблема с телеграм ботом, не могу сообразить, код из примера пакета на гитхабе нормально работал, бот читал сообщение, обрабатывал и все, затем принимал новое сообщение и обрабатывал, все ок. Но почему-то сейчас одно и тоже сообщение прилитает бесконечно,, удается его прочитать только если скормить айди +1 в GetUpdates, не могу понять почему вдруг стало работать не так и принятое сообщение не маркеруется прочитанным на сервере. Подскажите что можно сделать в этой ситуации?
саша
но такая, на втором шаге заканчивается
А на каком шаге заканчивается перегрузка оператора? И как вообще это считать?
Roman
pook.BlaBla(fack) — этот код в голанге может сделать что угодно, чем это лучше чем pook >> fack совершенно неясно
сори за мемо-спам, но мне немного забавно от вашей "многозначности")) var fack string = "a" pook.BlaBla(fack) меняем fack string на fack int где-то в недрах проекта и ломаем вообще всё поведение, потому-что BlaBla для string реализован иначе нежели BlaBla для int и тут не "вызов через точку" виноват, а перегрузка))
Eugenii
так как я его не на го перепишу, если он часть проекта на го?
извините, за некоторую бестактность, но если все так плохо с го и фиг вы что перепишите на то что надо то может имеет смысл в след за товарищем в Яндекс? ну или еще куда бо перепишите этот сервис, а там еще 149к
Eugenii
я абсолютно серьезно, работы много, а нервов на все не хватит
Roman
ему про DRY он про абстракции
Grom
надо читать апдейты с сервера, брать update_id и указывать его при следующем запросе (или update_id+1)
но если GetUpdates возвращает канал из которого я в бесконечном цикле вычитываю, то каким образом мне указать ему update_id?