Ailab
ахаха
ARTEM
Репозиторий.
Сразу так категорично) все в контролере быть не может чтоле
ARTEM
Отставить)
ARTEM
Все имеет место быть ))
Maks
Это пропаганда говнокода)
ARTEM
😅
Alexey
Alexey
в любой непонятной ситуации за все отвечает он
ARTEM
Без ответственности никогда не вырасти )
ARTEM
Maks
в любой непонятной ситуации за все отвечает он
Недавно пока лид продумывал решение, я это решение сделал и одновременно с тем как я его протестил и отправил ему, он в общий чат написал как сделать можно то что манагеры просят. В итоге я сделал 1в1 как он хотел. Готов получается. Не зря свои бабки получаю почти по верхушке рынка
Alexey
Alexey
а если получилось так себе - всегда можно обвинить разрабов в превышении должностных полномочий и излишней самодеятельности. Удобно же 😝
Sa
A
Подскажите, как в switch
из одного кейса попасть в дефолт?
например сработал case и вызвал метод, который вернул ошибку, и мне нужно переключиться на default:
Alexey
Alexey
https://go.dev/play/p/SXqZPyGWxLQ
Илья
Илья
Илья
Всем привет. Делаю по гайду из сайта buf, но почему-то пишет такую ошибку
Илья
Вроде помогло, но теперь это. Как я понимаю, нужно в deps что-то добавить?
Илья
Ура, сделал. Нужно было добавить в зависимости buf.build/envoyproxy/protoc-gen-validate
Андрей, спасибо!
🅞leksiy
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
Emin Zalaev
Emin Zalaev
A
А как сделать это в рантайме?
A
чтобы без ошибок
A
A
зачем нам алиас типа?
A
точнее не алиас, а зачем интерфейс?
Илья
Илья
мы присваиваем интерфейсу тип и значение структуры User
Илья
на моменте с user.(io.Closer) будет проверено, есть ли подходящие методы для интерфейса io.Closer
Andrey
как ты сложно все-таки объясняешь)
A
Andrey
A
Приложения может запускаться с разными типами хранилищ: redis, file, db и т.д.
Тип хранилища - определяется конфигурационным файлом.
Каждое хранилище реализует интерфейс Storage,
и лишь некоторые из них, реализуют Closer()
Нужно проверять, если хранилище, реализует Closer() то вызвать метод Close().
Andrey
Andrey
A
мне казалось это такой базовой операцией, которая должна быть в языке, где есть интерфейсы (хоть и не стандартные).
в php, java делается запросто)
A
A
Просто некуда их передавать.. Сейчас пример накидаю)
Andrey
можно при присвоении необязательный параметр передать, в котором будет функция закрытия например, ну я бы как-то так делал, это выглядит более наглядно
A
Вот пример кода (не рабочий) https://go.dev/play/p/l07l8hIsfR6
A
суть в том, что есть два типа хранилища, один их которых реализует Closer. И по хорошему, нужно вызывать этот метод, чтобы закрыть ресурсы.
Andrey
типа такого https://go.dev/play/p/a6xmOOnMtSJ
A
Всем спасибо! все оказалось чуть проще)
Вот так заработало
Andrey
Andrey
да мне интересно как это заработало :)
Andrey
мне там дефер нравится)
Andrey
хотя этот клоз тоже в вефере, так что почему бы и не заработать
Илья
Andrey
но вообще так пишут конечно и это печально, каждый раз когда меняю работаю боюсь попасть в такую команду
Sa
Grigorij
перед тем как начнешь не узнать
остаётся только дальше менять
Grigorij
а что из теории знать надо?
Юрий
Юрий
цель: решить задачу, больше проблем я не вижу
A
Все посмеялись))
A
поясните пожалуйста, что не так?)
A
или все сразу на Го начинали писать так, как нужно?)
Юрий
а как нужно это как?)
Юрий
вот и никто не может ответить
Юрий
расслабься, друг, решение есть решение. Пока не дали конкретных аргументов почему говно и где может быть узкое место - смех ничего не значит
A
Vladislav
Andrey
поясните пожалуйста, что не так?)
там в функции defer не нужен большинство над этим посмеялись
лично мне не понравилось Application, ты добавляешь еще 1 слой абстракции который не решает никаких проблем но при этом несет свои издержки