
Go Patterns
Кураторская коллекция идиоматического дизайна и моделей приложений для языка GO.
Вилка TMRT/Go-Patterns, но слилась с другими потрясающими вилками. может пойти с шаблонами в промежутке
Объединенные репо
- Объединено: https://github.com/nynicg/go-patterns
- Объединено: https://github.com/weichou1229/go-patterns
- Объединено: https://github.com/jianhan/go-patterns
- Объединено: https://github.com/sakari-ai/go-patterns
- Объединено : https: //github.com/restudy/go-patterns
Творческие закономерности
| Шаблон | Описание | Статус |
|---|
| Абстрактная фабрика | Предоставляет интерфейс для создания семей с соответствующими объектами | ✔ |
| Строитель | Строит сложный объект, используя простые объекты | ✔ |
| Фабричный метод | Определяет экземпляры объекта с специализированной функцией для создания экземпляров | ✔ |
| Объектный пул | Экземпляры и поддерживают группу экземпляров объектов того же типа | ✔ |
| Синглтон | Ограничивает экземпляры типа на один объект | ✔ |
Структурные закономерности
| Шаблон | Описание | Статус |
|---|
| Мост | Выпадает интерфейс из его реализации, чтобы оба могли меняться независимо | ✔ |
| Композит | Инкапсулирует и обеспечивает доступ к ряду различных объектов | ✔ |
| Декоратор | Добавляет поведение к объекту, статически или динамически | ✔ |
| Фасад | Использует один тип в качестве API для ряда других | ✔ |
| Пробег | Повторно использует существующие случаи объектов с аналогичным/идентичным состоянием, чтобы минимизировать использование ресурсов | ✔ |
| Прокси | Предоставляет суррогат для объекта для управления действиями | ✔ |
| Адаптер | Предоставляет суррогат для объекта для управления действиями | ✔ |
Поведенческие закономерности
| Шаблон | Описание | Статус |
|---|
| Цепочка ответственности | Избегает связывания отправителя с приемником, предоставляя больше, чем объект возможности обработать запрос | ✔ |
| Командование | Скупает команду и аргументы, чтобы позвонить позже | ✔ |
| Посредник | Подключает объекты и действует как прокси -сервер | ✔ |
| Сумасшедший | Создайте непрозрачный токен, который можно использовать, чтобы вернуться в предыдущее состояние | ✔ |
| Наблюдатель | Предоставьте обратный вызов для уведомления о событиях/изменениях в данных | ✔ |
| Реестр | Отслеживать все подклассы данного класса | ✔ |
| Состояние | Инкапсулирует различное поведение для того же объекта на основе его внутреннего состояния | ✔ |
| Стратегия | Позволяет выбирать поведение алгоритма во время выполнения | ✔ |
| Шаблон | Определяет класс скелетов, который определяет некоторые методы для подклассов | ✔ |
| Посетитель | Отделяет алгоритм от объекта, на котором он работает | ✔ |
| Устный переводчик | интерпретируйте свой собственный язык или составленные команды | ✔ |
Паттерны синхронизации
| Шаблон | Описание | Статус |
|---|
| Переменная условия | Предоставляет механизм, чтобы потоки временно отказались от доступа, чтобы дождаться какого -либо условия | ✘ |
| Lock/Mutex | Обеспечивает соблюдение предела взаимного исключения в ресурсе для получения эксклюзивного доступа | ✘ |
| Монитор | Комбинация схема переменных мутекс и условия | ✘ |
| ЧИТАТЬ ВРИТ ЛОКАК | Разрешает параллельный доступ к чтению, но только эксклюзивный доступ к операциям записи к ресурсу | ✔ |
| Семфор | Позволяет контролировать доступ к общему ресурсу | ✔ |
Паттерны параллелистики
| Шаблон | Описание | Статус |
|---|
| N-barrier | Предотвращает процесс, пока все N -процессы не достигнут барьеры | ✔ |
| Ограниченный параллелизм | Завершает большое количество независимых задач с ограничениями ресурсов | ✔ |
| Транслировать | Передает сообщение всем получателям одновременно | ✘ |
| Кораки | Подпрограммы, которые позволяют приостановить и возобновить выполнение в определенных местах | ✘ |
| Генераторы | Дает последовательность значений по одному | ✔ |
| Реактор | Запросы на обслуживание demultiplexes, доставленные одновременно в обработчик услуг и отправляют их синхронно для связанных обработчиков запросов | ✘ |
| Параллелизм | Выполняет большое количество независимых задач | ✔ |
| Производитель потребитель | Отделяет задачи от выполнения задач | ✔ |
Паттерны обмена сообщениями
| Шаблон | Описание | Статус |
|---|
| Фанат | Задачи Funnels на рабочую раковину (например, сервер) | ✔ |
| Фанат | Распределяет задачи между работниками (например, производитель) | ✔ |
| Фьючерсы и обещания | Действует как местополосцы результата, который изначально неизвестен в целях синхронизации | ✔ |
| Публиковать/подписаться | Передает информацию коллекции получателей, которые подписались на тему | ✔ |
| Push & pull | Распределяет сообщения нескольким работникам, организованного в трубопроводе | ✘ |
Образцы стабильности
| Шаблон | Описание | Статус |
|---|
| Переборки | Обеспечивает соблюдение принципа сдерживания сбоев (то есть предотвращает каскадные сбои) | ✘ |
| Цепь | Останавливает поток запросов, когда запросы, скорее всего, потерпят неудачу | ✔ |
| Крайний срок | Позволяет клиентам перестать ждать ответа после того, как вероятность ответа станет низкой (например, после ожидания 10 секунд для обновления страницы) | ✔ |
| Неудача | Проверяет доступность необходимых ресурсов в начале запроса и не выполняется, если требования не выполнены | ✘ |
| Подтверждение связи | Спрашивает компонент, может ли это занять больше нагрузки, если он не может, запрос отклоняется | ✘ |
| Устойчивое состояние | Для каждой службы, которая накапливает ресурс, некоторые другие услуги должны переоценить этот ресурс | ✘ |
Профилирование узоров
| Шаблон | Описание | Статус |
|---|
| Функции времени | Заполняет функцию и регистрирует выполнение | ✔ |
Идиомы
| Шаблон | Описание | Статус |
|---|
| Функциональные параметры | Позволяет создавать чистые API с использованием вменяемых дефолтов и идиоматических переопределений | ✔ |
Анти-паттерны
Реализация шаблона
Go-Pattern-examples