Go-SOLID Single Responsibility good/bad pattern Open-Closed good/bad pattern Liskov Substitution good pattern Interface Segregation good/bad pattern Dependency Inversion good/bad pattern