2. The bigger the interface, the
weaker the abstraction
• Чем меньше интерфейс, тем он полезнее
• Single responsibility principle
2
type Reader interface {
Read(p []byte) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
3. interface{} says nothing
• Пустому интерфейсу удовлетворяет любой тип
• Пустой интерфейс ничего не может сказать о конкретном
типе
• От пустого интерфейс нельзя ожидать какого-либо поведения
3
4. Gofmt's style is no one's favorite,
yet gofmt is everyone's favorite
• gofmt — автоматический codestyle, единый для всех
• gofmt — не супер-идеальный, но уже не изменится
• нет споров о том, чей codestyle «более лучше» :)
• чужой код проще читается
4
5. A little copying is better than
a little dependency
• абстракция ради абстракции
• проходит время, и старая абстракция подходит уже не для
всех случаев, и её приходится усложнять
5
6. Clear is better than clever
будьте проще — ваш код для людей!
6
7. Errors are values
• if err != nil — это не try…catch!
• относитесь к ошибкам так же, как и к другим значениям
7
type error interface {
Error() string
}
8. Don’t panic
• кто отвечает за обработку ошибок?
• ошибка, «обработанная» выбросом паники, я тебя никогда не
дождусь :(
8
9. Don’t just check errors,
handle them gracefully
• добавить полезную информацию об ошибке
• передать тому, кто вызвал
9
10. Design the architecture, name the
components, document the details
• архитектура приложения
• деление на модули
• понятные имена для модулей, функций, переменных
10
11. Documentation is for users
• чтобы понять, что функция делает, я хочу посмотреть её тело
(«пишите проще!»)
• чтобы понять, для чего функция нужна, я хочу посмотреть её
документацию
11
Думать как пользователь: