go dependency injection: techniques for clean and testable code | pilput