👀
Вопрос был именно к этому коду
там в ответе сслыка на рабочий код tdlib!
Denis
перепишу Ваше решение, в точности так, как я предложил выше.
Не надо переписывать мое решение, добавь просто эту логику в свое решение
Denis
Ты хочешь чтобы я сначала у себя реализовал эту логику?
👀
Прошу все же читать мои сообщения, чтобы мне не приходилось повторять. Это как-то странно выглядит, мне кажется, что не все мои сообщения проходят:)
Denis
Нет, я все прочитал
👀
Ты хочешь чтобы я сначала у себя реализовал эту логику?
Согласно здравому смыслу бремя доказательства (см. ссылку выше на Чайник Рассела) лежит на утверждающем. Ваша милость утверждает, что подход описываемый мною, не заработает. Я уверен в обратном, имею работающие, живые доказательства. Я определенно не должен ничего писать, чтобы проиллюстрировать заблуждение, которое у меня, я уверен, отсутствует, а Вы утверждаете что есть.
👀
Но я с радостью покажу, как можно написать эффектнее и проще буквально любой Ваш код на спор)
Denis
Да все, пишу уже
👀
Окей, я напишу, мне не сложно. Я просто написал тебе задачу на расширение, хотел чтобы ты сначала сам попробовал, но если тебе проще по моему коду, я ща напишу
как я отмечал выше - я уже попробовал и код на prod (предложил выслать мне почту, чтобы добавить в проект), кроме того я дал ссылку на другой prod проект в открытом доступе.
Denis
как я отмечал выше - я уже попробовал и код на prod (предложил выслать мне почту, чтобы добавить в проект), кроме того я дал ссылку на другой prod проект в открытом доступе.
https://play.golang.org/p/mUFEHghmAqe Вот, теперь перед отправкой сообщения мы должны проверить не забанен ли пользователь у данного провайдера
Denis
там в ответе сслыка на рабочий код tdlib!
Дело не в том как можно или нельзя написать, а в самом таймлайне разработки - была одна задача - появился код со свитч кейсами, задача расширилась - теперь либо ещё один свитч кейс написать (тот же самый по сути), либо сломать и переделывать существующий код
👀
в случае с интерфейсами - разработчик будет шариться по коду и офигевать ничего не понимая
👀
кроме того, обращаю внимание на компактность решения и исключительную редкость момента, когда туда придется что-то добавлять - лишь в случае подключения целого нового протокола
👀
в моем понимании < 10
👀
могу конечно, такой код вообще нельзя выдавать наружу, а ошибку, что "пользователь забанен" - или что там с ним случилось, должен возвращать Send, чтобы не грузить прикладного программиста двумя вызовами, вместо одного кроме того, проверка такого сорта - не факт, что может быть применена вообще к какому-то messenger, например, в случае со slack - проще стукнуться и узнать, что hook больше не работает, чем сначала делать к нему HEAD, прежде чем отвалиться
Denis
в моем понимании < 10
Если считаете это нормальным, могу только позавидовать Вашему трудолюбию, оно нужно :)
👀
Если считаете это нормальным, могу только позавидовать Вашему трудолюбию, оно нужно :)
это как раз - лень... хочется делать код всегда очень легко читаемым
👀
и компактным
👀
хороший код - код который понятен с первого взгляда
👀
Если считаете это нормальным, могу только позавидовать Вашему трудолюбию, оно нужно :)
но если что эти 10 кейсов можно написать же 1 минуту, не так ли?) прямо на будущее?)
👀
это не трудолюбие, это - лень и забота о тех, кому это потом читать
👀
я отправлюсь поспать, но вечером с радостью продолжу этот увлекательнейший диалог) спасибо за упорство:) мне правда приятно:)
Denis
но если что эти 10 кейсов можно написать же 1 минуту, не так ли?) прямо на будущее?)
Пример слишком простой, в реальности кейса в свитче не три, и функций не две
👀
и, как и обещал, оптимизирую и красиво перепишу любой код, который будет предложен)))
👀
простота - это сила)
👀
собственно об этом и язык Go)
👀
Весь вопрос а аудитории читающих :)
надеюсь, меня не забанят((((
Denis
могу конечно, такой код вообще нельзя выдавать наружу, а ошибку, что "пользователь забанен" - или что там с ним случилось, должен возвращать Send, чтобы не грузить прикладного программиста двумя вызовами, вместо одного кроме того, проверка такого сорта - не факт, что может быть применена вообще к какому-то messenger, например, в случае со slack - проще стукнуться и узнать, что hook больше не работает, чем сначала делать к нему HEAD, прежде чем отвалиться
А если потребуется проверкой защитить какой-то другой метод. Ну не только же Send бывает, и не все провайдеры такие крутые как телеграм и поддержкивают универсальные сообщения на все случаи жизни? Скажем нужно нам забирать через какое-то время информацию о том прочитал пользователь сообщение или нет. Что-то типо provider.IsUserReadMessage(...) перед тем как мы проверим эту информацию, нам необходимо еще раз чекнуть не забанен или пользователь с тех пор как мы ему отправили сообщение.
Denis
состояния переписок надо деражть внутри у себя, если их надо отображать или следить за ними
Ладно, я тебе напишу код, а ты потом его потом просто перепишешь на свой манер и все.
Null
Деплой docker swarm из Gitlab CI https://golangforall.com/ru/post/go-deploy-docker-swarm-gitlab.html @Golang_google
Тимофей
есть какие-нибудь алгоритмы проверки строки, чтобы она была не пустой и не содержала только пробелы
Тимофей
strings.Trim()
спасибо
Denis
состояния переписок надо деражть внутри у себя, если их надо отображать или следить за ними
https://play.golang.org/p/-oCHrE9L9jn Вот. 1. Удалил CanSend который проверял наличие Networktype у пользователя, у себя тоже можешь убрать, он все равно к вопросу об интерфейсах отношения не имеет 2. Добавил метод IsMessageRead который проверяет было ли прочитано сообщение пользователем (Теперь Send возвращает Id сообщения). 3. Добавил метод IsUserBanned его надо вызвать перед отправкой сообщения (Send) и перед проверкой на прочитанность сообщения (IsMessageRead). Ты там в коде увидишь. Ну и все, задача твоя как и в прошлый раз избавиться от интерфейса SendProvider
TEH3OP
Всем привет а чайникам сюда можно? Или может есть канал для начинающих?
👀
надеюсь это объяснение наконец ответит на вопрос
👀
я подошел к ответу, как и обещал довольно серьезно, прошу отнестись так же, и не писать - "нет ты вот сделай, чтобы мой модельный пример, по формальным признакам работал" - мы это сделали вчера ночью, и вроде все получилось.
A
Не осилил голанг, перешел на питон)
👀
Не осилил голанг, перешел на питон)
Golang - проще в итоге значительно
A
Golang - проще в итоге значительно
Не знаю, учил по книгам, две переведенные на русский язык, одна 16го года, другая 14 вроде. Ну вообще не то, пришел к выводу, что лучше сначало в полной мере осилить питон, а уже потом в поддержку го подучить
TEH3OP
Golang - проще в итоге значительно
Радует тогда, что я Py осилил уже.
TEH3OP
Вот такой вопрос: если каждая функция возвращает error , то под каждым вызовом делать проверку егога этого на nil, получается надо. А нет какого-то return_if? Это же адик какой-то везде ифы эти .
A
Вот такой вопрос: если каждая функция возвращает error , то под каждым вызовом делать проверку егога этого на nil, получается надо. А нет какого-то return_if? Это же адик какой-то везде ифы эти .
вы недостаточно понимаете логику го и его развития и возможно стоит почитать любой тикет в github голэнга, например про тернарную операцию. Если же открытие гитхаба или, ни дай боже, стэковерфлоу с гуглом представляет такую трудность, то стоит просто подумать - «а что если весь код будет предельно простым, однозначно понимаемым и читаемым, на сколько проще станет людям после меня разбираться с ним через 5-10 лет?». Или же «а что если все безумные идеи по улучшению синтаксиса появятся в языке, как его смогут понимать?»
A
“throw new CustomException”
TEH3OP
Там есть своя библиотека, для тестирования и Error'ов.
Спасибо. Буду гуглить в эту сторону.
👀
Просто чтобы убедиться, верно ли я понимаю вопрос: - в составе более крупного ПО реализовано несколько API сторонних поставщиков; - характер использования этих API таков, что было бы удобно выдать разработчику унифицированный API, что и было сделано; - разработчик самой по себе библиотеки API, однако, хотел бы написать unit-tests, проверяющих валидность ответов унифицирующих функций для этого API, и для этих целей хотел бы вызывать не сами API, но какие-то mocks?
Null
Бинарное дерево на Go для новичка https://nuancesprog.ru/p/6978/ @Golang_google
Bogdan
panic: runtime error: invalid memory address or nil pointer dereference
Bogdan
встречались с таким? Появляется на conn.Write(websocket.textmessage, _)
Bogdan
ну, при работе с вебсокетом, если вкратц
🅞leksiy
Это gorilla?
🅞leksiy
Нужно больше контекста по проблеме
Bogdan
да
Bogdan
если у вас есть время - могу дать доступ к репе с описанием
Bogdan
т.е где горутина, которая, собсна, и проблему выдает
🅞leksiy
Дай
Bogdan
но, как я понял, ошибка именно в сокете, потому что рутина без conn.Write работает и с fmt.println норм все плюет
Bogdan
сек, в лс норм?
🅞leksiy
Да
🅞leksiy
А conn точно не nil?
Bogdan
если я не ошибаюсь, то нет
Bogdan
потому что до этого тестил ф-цию прямо в классе, где я описываю серверную часть приложения и все норм было
Bogdan
но клиенту с каждым логином летело +1 сообщение. Например - у него айди 1 и ему летит сообщение по айди. Когда логинится новый под условным 34, то 1 юзеру опять летит сообщение, но уже не 1, а два