Ailab
ахаха
ARTEM
Репозиторий.
Сразу так категорично) все в контролере быть не может чтоле
Maks
Сразу так категорично) все в контролере быть не может чтоле
Ну мы про нормальные подходы тут разговариваем. О высоком. Архитектура, дизайн(про код офк)
ARTEM
Отставить)
ARTEM
Все имеет место быть ))
Maks
Это пропаганда говнокода)
ARTEM
😅
Alexey
в любой непонятной ситуации за все отвечает он
ARTEM
Без ответственности никогда не вырасти )
Юра (Юрий Александрович)
Без ответственности никогда не вырасти )
Без ответственности можно вырасти безответственным.
ARTEM
Без ответственности можно вырасти безответственным.
Такое высказывание только в рамочку и на полку )
Maks
в любой непонятной ситуации за все отвечает он
Недавно пока лид продумывал решение, я это решение сделал и одновременно с тем как я его протестил и отправил ему, он в общий чат написал как сделать можно то что манагеры просят. В итоге я сделал 1в1 как он хотел. Готов получается. Не зря свои бабки получаю почти по верхушке рынка
Alexey
а если получилось так себе - всегда можно обвинить разрабов в превышении должностных полномочий и излишней самодеятельности. Удобно же 😝
Maks
возможно еще дело в манагерах.. это целое искусство, как заставить разработчиков сделать то что они хотят так, чтобы разрабы еще и думали что они сами это все придумали и создали 😏
Там была задача я ее сделал, но один пункт отвалился из за текущей реализации. Пришлось придумывать способ как решить новую траблу так как она оказалась для манагера который что то в админке смотрит - важна
A
Подскажите, как в switch из одного кейса попасть в дефолт? например сработал case и вызвал метод, который вернул ошибку, и мне нужно переключиться на default:
Alexey
https://go.dev/play/p/SXqZPyGWxLQ
Илья
Илья
Илья
Всем привет. Делаю по гайду из сайта buf, но почему-то пишет такую ошибку
Andrey
Всем привет. Делаю по гайду из сайта buf, но почему-то пишет такую ошибку
Ну я полазил в интернетах, и мне кажется они немного проебались, и там уже не plugin надо писать, а name
Илья
Вроде помогло, но теперь это. Как я понимаю, нужно в deps что-то добавить?
Илья
Ура, сделал. Нужно было добавить в зависимости buf.build/envoyproxy/protoc-gen-validate Андрей, спасибо!
A
Подскажите, а как проверить, реализует ли структура интерфейс? как-то через утверждения типов? package main import ( "io") type User struct{} func (u *User) Close() error { return nil} func main() { u := User{} if _, ok := u.(io.Closer); ok { u.Close() } } но это не рабочий код(
Emin Zalaev
Подскажите, а как проверить, реализует ли структура интерфейс? как-то через утверждения типов? package main import ( "io") type User struct{} func (u *User) Close() error { return nil} func main() { u := User{} if _, ok := u.(io.Closer); ok { u.Close() } } но это не рабочий код(
делаешь глобальную переменную проверяешь комплиться ли программа, далее удаляешь метод твоей структуры, программа не должна компилиться
A
А как сделать это в рантайме?
A
чтобы без ошибок
Илья
А как сделать это в рантайме?
var user User var i any = user _, ok := user.(io.Closer)
A
var user User var i any = user _, ok := user.(io.Closer)
спасибо, а для чего это? var i any = user
A
зачем нам алиас типа?
A
точнее не алиас, а зачем интерфейс?
Илья
мы присваиваем интерфейсу тип и значение структуры User
Илья
на моменте с user.(io.Closer) будет проверено, есть ли подходящие методы для интерфейса io.Closer
Andrey
как ты сложно все-таки объясняешь)
A
на моменте с user.(io.Closer) будет проверено, есть ли подходящие методы для интерфейса io.Closer
утверждения типов вида X.(type) работают только для X = интерфесу?
Andrey
утверждения типов вида X.(type) работают только для X = интерфесу?
дай скажу по другому. тайп-каст ты можешь делать только с интерфейсом. (аля any) все остальное проверяется на уровне компиляции
A
Приложения может запускаться с разными типами хранилищ: redis, file, db и т.д. Тип хранилища - определяется конфигурационным файлом. Каждое хранилище реализует интерфейс Storage, и лишь некоторые из них, реализуют Closer() Нужно проверять, если хранилище, реализует Closer() то вызвать метод Close().
A
мне казалось это такой базовой операцией, которая должна быть в языке, где есть интерфейсы (хоть и не стандартные). в php, java делается запросто)
Andrey
не понял, поясните пожалуйста
в виде аргумента функции передавай интерфейс. и только "объекты" которые его имеют, смогу туда попасть
A
Просто некуда их передавать.. Сейчас пример накидаю)
Andrey
можно при присвоении необязательный параметр передать, в котором будет функция закрытия например, ну я бы как-то так делал, это выглядит более наглядно
A
Вот пример кода (не рабочий) https://go.dev/play/p/l07l8hIsfR6
A
суть в том, что есть два типа хранилища, один их которых реализует Closer. И по хорошему, нужно вызывать этот метод, чтобы закрыть ресурсы.
Andrey
Вот пример кода (не рабочий) https://go.dev/play/p/l07l8hIsfR6
я бы тут конечно фабрику не делал но если очень хочется то кто же вам запретит, сделайте вторым возвращаемым значением клоз функцию, для тех стораджей которая она не определена пусть она ничего не делает
Andrey
типа такого https://go.dev/play/p/a6xmOOnMtSJ
A
Всем спасибо! все оказалось чуть проще) Вот так заработало
Andrey
да мне интересно как это заработало :)
Andrey
мне там дефер нравится)
Andrey
хотя этот клоз тоже в вефере, так что почему бы и не заработать
Andrey
но вообще так пишут конечно и это печально, каждый раз когда меняю работаю боюсь попасть в такую команду
Andrey
но вообще так пишут конечно и это печально, каждый раз когда меняю работаю боюсь попасть в такую команду
поддерживаю. скоро буду менять работу, боюсь попасть в команду, где челики положили болт на теорию и книги по Го, пришли с js или php (что очень очень часто), и пишут проекты по принципу "хуяк-хуяк и в продакшен, компилиться же"
Grigorij
перед тем как начнешь не узнать остаётся только дальше менять
Grigorij
а что из теории знать надо?
Юрий
цель: решить задачу, больше проблем я не вижу
A
Все посмеялись))
A
поясните пожалуйста, что не так?)
A
или все сразу на Го начинали писать так, как нужно?)
Юрий
а как нужно это как?)
Юрий
вот и никто не может ответить
A
а как нужно это как?)
не знаю)) все посмеялись над решением
Vladislav
поясните пожалуйста, что не так?)
нафига ты там возвращаешь error если оно у тебя всегда nil?
Юрий
расслабься, друг, решение есть решение. Пока не дали конкретных аргументов почему говно и где может быть узкое место - смех ничего не значит
Vladislav
Andrey
поясните пожалуйста, что не так?)
там в функции defer не нужен большинство над этим посмеялись лично мне не понравилось Application, ты добавляешь еще 1 слой абстракции который не решает никаких проблем но при этом несет свои издержки