👀
👀
Denis
Ты хочешь чтобы я сначала у себя реализовал эту логику?
👀
Прошу все же читать мои сообщения, чтобы мне не приходилось повторять. Это как-то странно выглядит, мне кажется, что не все мои сообщения проходят:)
Denis
Нет, я все прочитал
👀
Ты хочешь чтобы я сначала у себя реализовал эту логику?
Согласно здравому смыслу бремя доказательства (см. ссылку выше на Чайник Рассела) лежит на утверждающем. Ваша милость утверждает, что подход описываемый мною, не заработает. Я уверен в обратном, имею работающие, живые доказательства. Я определенно не должен ничего писать, чтобы проиллюстрировать заблуждение, которое у меня, я уверен, отсутствует, а Вы утверждаете что есть.
👀
Но я с радостью покажу, как можно написать эффектнее и проще буквально любой Ваш код на спор)
Denis
Согласно здравому смыслу бремя доказательства (см. ссылку выше на Чайник Рассела) лежит на утверждающем. Ваша милость утверждает, что подход описываемый мною, не заработает. Я уверен в обратном, имею работающие, живые доказательства. Я определенно не должен ничего писать, чтобы проиллюстрировать заблуждение, которое у меня, я уверен, отсутствует, а Вы утверждаете что есть.
Окей, я напишу, мне не сложно.
Я просто написал тебе задачу на расширение, хотел чтобы ты сначала сам попробовал, но если тебе проще по моему коду, я ща напишу
Denis
Да все, пишу уже
Denis
Denis
там в ответе сслыка на рабочий код tdlib!
Дело не в том как можно или нельзя написать, а в самом таймлайне разработки - была одна задача - появился код со свитч кейсами, задача расширилась - теперь либо ещё один свитч кейс написать (тот же самый по сути), либо сломать и переделывать существующий код
👀
👀
в случае с интерфейсами - разработчик будет шариться по коду и офигевать ничего не понимая
👀
кроме того, обращаю внимание на компактность решения и исключительную редкость момента, когда туда придется что-то добавлять - лишь в случае подключения целого нового протокола
Denis
👀
в моем понимании < 10
Denis
👀
могу конечно, такой код вообще нельзя выдавать наружу, а ошибку, что "пользователь забанен" - или что там с ним случилось, должен возвращать Send, чтобы не грузить прикладного программиста двумя вызовами, вместо одного
кроме того, проверка такого сорта - не факт, что может быть применена вообще к какому-то messenger, например, в случае со slack - проще стукнуться и узнать, что hook больше не работает, чем сначала делать к нему HEAD, прежде чем отвалиться
Denis
в моем понимании < 10
Если считаете это нормальным, могу только позавидовать Вашему трудолюбию, оно нужно :)
👀
👀
и компактным
👀
хороший код - код который понятен с первого взгляда
👀
👀
это не трудолюбие, это - лень и забота о тех, кому это потом читать
👀
я отправлюсь поспать, но вечером с радостью продолжу этот увлекательнейший диалог)
спасибо за упорство:) мне правда приятно:)
Denis
Denis
Denis
👀
и, как и обещал, оптимизирую и красиво перепишу любой код, который будет предложен)))
👀
👀
простота - это сила)
👀
собственно об этом и язык Go)
👀
👀
Denis
могу конечно, такой код вообще нельзя выдавать наружу, а ошибку, что "пользователь забанен" - или что там с ним случилось, должен возвращать Send, чтобы не грузить прикладного программиста двумя вызовами, вместо одного
кроме того, проверка такого сорта - не факт, что может быть применена вообще к какому-то messenger, например, в случае со slack - проще стукнуться и узнать, что hook больше не работает, чем сначала делать к нему HEAD, прежде чем отвалиться
А если потребуется проверкой защитить какой-то другой метод. Ну не только же Send бывает, и не все провайдеры такие крутые как телеграм и поддержкивают универсальные сообщения на все случаи жизни?
Скажем нужно нам забирать через какое-то время информацию о том прочитал пользователь сообщение или нет.
Что-то типо provider.IsUserReadMessage(...) перед тем как мы проверим эту информацию, нам необходимо еще раз чекнуть не забанен или пользователь с тех пор как мы ему отправили сообщение.
Denis
могу конечно, такой код вообще нельзя выдавать наружу, а ошибку, что "пользователь забанен" - или что там с ним случилось, должен возвращать Send, чтобы не грузить прикладного программиста двумя вызовами, вместо одного
кроме того, проверка такого сорта - не факт, что может быть применена вообще к какому-то messenger, например, в случае со slack - проще стукнуться и узнать, что hook больше не работает, чем сначала делать к нему HEAD, прежде чем отвалиться
Если реализовывать проверку на забаненость в Send ее придется повторить в IsUserReadMessage
👀
Denis
Null
Деплой docker swarm из Gitlab CI
https://golangforall.com/ru/post/go-deploy-docker-swarm-gitlab.html
@Golang_google
Тимофей
есть какие-нибудь алгоритмы проверки строки, чтобы она была не пустой и не содержала только пробелы
Denis
Тимофей
Denis
состояния переписок надо деражть внутри у себя, если их надо отображать или следить за ними
https://play.golang.org/p/-oCHrE9L9jn
Вот.
1. Удалил CanSend который проверял наличие Networktype у пользователя, у себя тоже можешь убрать, он все равно к вопросу об интерфейсах отношения не имеет
2. Добавил метод IsMessageRead который проверяет было ли прочитано сообщение пользователем (Теперь Send возвращает Id сообщения).
3. Добавил метод IsUserBanned его надо вызвать перед отправкой сообщения (Send) и перед проверкой на прочитанность сообщения (IsMessageRead). Ты там в коде увидишь.
Ну и все, задача твоя как и в прошлый раз избавиться от интерфейса SendProvider
TEH3OP
Всем привет а чайникам сюда можно? Или может есть канал для начинающих?
👀
👀
надеюсь это объяснение наконец ответит на вопрос
👀
я подошел к ответу, как и обещал довольно серьезно, прошу отнестись так же, и не писать - "нет ты вот сделай, чтобы мой модельный пример, по формальным признакам работал" - мы это сделали вчера ночью, и вроде все получилось.
Emil
👀
A
Не осилил голанг, перешел на питон)
A
Golang - проще в итоге значительно
Не знаю, учил по книгам, две переведенные на русский язык, одна 16го года, другая 14 вроде. Ну вообще не то, пришел к выводу, что лучше сначало в полной мере осилить питон, а уже потом в поддержку го подучить
TEH3OP
Вот такой вопрос: если каждая функция возвращает error , то под каждым вызовом делать проверку егога этого на nil, получается надо. А нет какого-то return_if? Это же адик какой-то везде ифы эти .
A
A
“throw new CustomException”
TEH3OP
вы недостаточно понимаете логику го и его развития и возможно стоит почитать любой тикет в github голэнга, например про тернарную операцию. Если же открытие гитхаба или, ни дай боже, стэковерфлоу с гуглом представляет такую трудность, то стоит просто подумать - «а что если весь код будет предельно простым, однозначно понимаемым и читаемым, на сколько проще станет людям после меня разбираться с ним через 5-10 лет?». Или же «а что если все безумные идеи по улучшению синтаксиса появятся в языке, как его смогут понимать?»
Ну я так понял, чайникам всё-таки нельзя сюда. Или просто буйных в вечерний час развязывают. Ну буду верить что так...
Т.е. что-то вроде return_if там есть. Ладно буду искать, ато все ссылки по "golang error handling" на примеры с банальным if error != nil указывают.
Спасибо, буду рыть дальше.
TEH3OP
👀
Просто чтобы убедиться, верно ли я понимаю вопрос:
- в составе более крупного ПО реализовано несколько 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, а два