Size: a a a

2021 June 16

PM

Platon M in Go-go!
/help@banofbot
источник

J

Johnny in Go-go!
В го нету классов, есть типы и структуры. Передавай как внешнюю зависимость параметрами при создании
источник

J

Johnny in Go-go!
type Foo struct {
   redis *redis.Connection
}
func NewFoo(redis *redis.Connection) *Foo {
   return &Foo{redis}
}

А вообще: нделайте зависимости не от реализации, а от интерфейсов. Если зависеть от редис - сложно тестировать. Если зависеть от интерфейса
type Cache interface {
   Get(key string) interface{}
   Set(key string, value interface{})
   …
}
Например, то в любой момент можно подменить редис чем угодно и код будет работать. И мокать легко, и SOLIDно
источник

е

енот in Go-go!
большое спасибо!
источник

J

Johnny in Go-go!
И мой вам совет: сначала хорошо вникните в good practices типо solid, dry, kiss и т.д. (они не истина в последней инстанции, но проясняют многое) и как строить нормальную архитектуру (clean architecture, например). И половина проблем сама отпадёт
источник

е

енот in Go-go!
ну DRY я понимаю, KISS считаю что понимаю.
источник

е

енот in Go-go!
с SOLID сложнее
источник

J

Johnny in Go-go!
Та же Вики очень хорошо рассказывает в секции «Принципы». Если что не ясно по конкретному инициалу - спрашивай
источник

е

енот in Go-go!
мне определённо не хватает понимания интерфейсов
источник

AP

Andrew Popov in Go-go!
Мне, почему-то, меньше всего понятны были именно статьи из вики. Словно пишут так, чтобы скрыть сокральные смыслы SOLID.

Была одна статья где было ну очень понятно описано, но нашёл только это.
Тоже довольно подробно и ясно по каждому принципу.

http://sergeyteplyakov.blogspot.com/2014/08/single-responsibility-principle.html

Но вообще, глубокое понимание приходит на практике только…
источник

е

енот in Go-go!
спасибо
источник

J

Johnny in Go-go!
Интерфейс по-простому - описание (прости, не могу придумать нормальных аналогий). Он не говорит, КАК он что-то делает, но говорит ЧТО он может делать
источник

е

енот in Go-go!
это я понимаю
источник

е

енот in Go-go!
я не очень понимаю где их и как использовать
источник

AP

Andrew Popov in Go-go!
SOLID поможет понять.
источник

AP

Andrew Popov in Go-go!
Чтобы зависимости были не от реализации, а от абстракций.
источник

е

енот in Go-go!
https://i.imgur.com/cN72Ro2.png
https://gist.github.com/chemax/795e1461ffaaecd66e913bdf5ef6ed71
почему оно может не видеть функцию Discovery?
IDE ошибок не показывает, запускаю на удалённом сервере
источник

J

Johnny in Go-go!
Вот база например: ты можешь напрямую писать запросы, но они зависят от диалекта. Или же ты можешь сделать репозиторий, в котором есть findByID() не твоё приложение уже не волнует из какой именно базы ты будешь читать данные. Тебе нужно захешировать пароль: ты можешь напрямую юзать bcrypt например, а можешь сделать интерфейс Hasher с методом Hash и Check, и не волноваться, как именно ты потом эти пароли будешь хешить.
Примеров может быть много, у условной модели User тебе больше интересны конкретные значения полей, а у условного NotificationSender только метод Send. Тогда User - структура, а NotificationSender - интерфейс, который потом реализуй как хочешь
источник

J

Johnny in Go-go!
“DiscoveryY”?
источник

е

енот in Go-go!
не, это я не то заскринил
источник