golang与23种设计模式