golang design pattern