Home

Awesome

<p align="center"> <img src="/gopher.png" height="400"> <h1 align="center"> Go Patterns <br> <a href="http://travis-ci.org/tmrts/go-patterns"><img alt="build-status" src="https://img.shields.io/badge/build-passing-brightgreen.svg?style=flat-square" /></a> <a href="https://github.com/sindresorhus/awesome" ><img alt="awesome" src="https://img.shields.io/badge/awesome-%E2%9C%93-ff69b4.svg?style=flat-square" /></a> <a href="https://github.com/tmrts/go-patterns/blob/master/LICENSE" ><img alt="license" src="https://img.shields.io/badge/license-Apache%20License%202.0-E91E63.svg?style=flat-square" /></a> </h1> </p>

A curated collection of idiomatic design & application patterns for Go language.

Creational Patterns

PatternDescriptionStatus
Abstract FactoryProvides an interface for creating families of releated objects
BuilderBuilds a complex object using simple objects
Factory MethodDefers instantiation of an object to a specialized function for creating instances
Object PoolInstantiates and maintains a group of objects instances of the same type
SingletonRestricts instantiation of a type to one object

Structural Patterns

PatternDescriptionStatus
BridgeDecouples an interface from its implementation so that the two can vary independently
CompositeEncapsulates and provides access to a number of different objects
DecoratorAdds behavior to an object, statically or dynamically
FacadeUses one type as an API to a number of others
FlyweightReuses existing instances of objects with similar/identical state to minimize resource usage
ProxyProvides a surrogate for an object to control it's actions

Behavioral Patterns

PatternDescriptionStatus
Chain of ResponsibilityAvoids coupling a sender to receiver by giving more than object a chance to handle the request
CommandBundles a command and arguments to call later
MediatorConnects objects and acts as a proxy
MementoGenerate an opaque token that can be used to go back to a previous state
ObserverProvide a callback for notification of events/changes to data
RegistryKeep track of all subclasses of a given class
StateEncapsulates varying behavior for the same object based on its internal state
StrategyEnables an algorithm's behavior to be selected at runtime
TemplateDefines a skeleton class which defers some methods to subclasses
VisitorSeparates an algorithm from an object on which it operates

Synchronization Patterns

PatternDescriptionStatus
Condition VariableProvides a mechanism for threads to temporarily give up access in order to wait for some condition
Lock/MutexEnforces mutual exclusion limit on a resource to gain exclusive access
MonitorCombination of mutex and condition variable patterns
Read-Write LockAllows parallel read access, but only exclusive access on write operations to a resource
SemaphoreAllows controlling access to a common resource

Concurrency Patterns

PatternDescriptionStatus
N-BarrierPrevents a process from proceeding until all N processes reach to the barrier
Bounded ParallelismCompletes large number of independent tasks with resource limits
BroadcastTransfers a message to all recipients simultaneously
CoroutinesSubroutines that allow suspending and resuming execution at certain locations
GeneratorsYields a sequence of values one at a time
ReactorDemultiplexes service requests delivered concurrently to a service handler and dispatches them syncronously to the associated request handlers
ParallelismCompletes large number of independent tasks
Producer ConsumerSeparates tasks from task executions

Messaging Patterns

PatternDescriptionStatus
Fan-InFunnels tasks to a work sink (e.g. server)
Fan-OutDistributes tasks among workers (e.g. producer)
Futures & PromisesActs as a place-holder of a result that is initially unknown for synchronization purposes
Publish/SubscribePasses information to a collection of recipients who subscribed to a topic
Push & PullDistributes messages to multiple workers, arranged in a pipeline

Stability Patterns

PatternDescriptionStatus
BulkheadsEnforces a principle of failure containment (i.e. prevents cascading failures)
Circuit-BreakerStops the flow of the requests when requests are likely to fail
DeadlineAllows clients to stop waiting for a response once the probability of response becomes low (e.g. after waiting 10 seconds for a page refresh)
Fail-FastChecks the availability of required resources at the start of a request and fails if the requirements are not satisfied
HandshakingAsks a component if it can take any more load, if it can't, the request is declined
Steady-StateFor every service that accumulates a resource, some other service must recycle that resource

Profiling Patterns

PatternDescriptionStatus
Timing FunctionsWraps a function and logs the execution

Idioms

PatternDescriptionStatus
Functional OptionsAllows creating clean APIs with sane defaults and idiomatic overrides

Anti-Patterns

PatternDescriptionStatus
Cascading FailuresA failure in a system of interconnected parts in which the failure of a part causes a domino effect