Design Patterns in golang