Object Oriented Design Patterns for Go