# SOLID Principles with Go Examples Every Developer Should Master (review and rewrite in python)
This is a review of https://towardsdev.com/solid-principles-with-go-examples-every-developer-should-master-6bc6f9f2b6ab
## Single Responsibility Principle (SRP)
```python=
class UserRepository:
def __init__(self):
self.db = "some db"
def find_by_id(id):
// Find user by ID
def save(user):
// save to database
```
## Open/Closed Principle (OCP)
```python=
class UserService:
def __init__(self):
self.repo = UserRepository()
def find_user_by_id(self,id):
self.repo.find_byd_id(id)
def save_user(self,user):
self.repo.save(use)
```
## Liskov Substitution Principle (LSP)
```pytnon=
@dataclass
class User:
id: int
name: str
email: str
def send_email(self):
// send email to user
...
class Admin(User):
def send_email(self):
// send email to admin
...
```
## Interface Segregation Principle (ISP)
In my opinon, role interface is the extreme
```python=
class UserService:
def create(self):
...
def update(self):
...
def delete(self):
...
def get_all_users(self):
...
```
```python=
class CreateUser:
def create(self):
...
```
## Dependency Inversion Principle (DIP)
```python=
class Saver:
def save(self):
raise NotImplementedError
class DB(Saver):
def save(self):
//implementation
...
class UserService:
def __init__(self):
self.saver = Saver()
def create_user(self,name):
self.saver.save(name)
```