gitextract_t7lucnow/ ├── .gitignore ├── LICENSE ├── README.md ├── ch01/ │ ├── 01_defining_depenency_injection/ │ │ ├── 01_interface.go │ │ ├── 02_function_literal.go │ │ ├── 03_test_without_nfs_test.go │ │ └── 04_fail_test_without_nfs_test.go │ └── 02_code_smells/ │ ├── 01_code_bloat/ │ │ └── 01_switch_type.go │ ├── 02_resistance_to_change/ │ │ └── 01_shotgun_surgey.go │ ├── 03_wasted_effort/ │ │ ├── 01_excessive_comments.go │ │ └── 02_complicated_go.go │ └── 04_tight_coupling/ │ ├── 01_circular_dependencies/ │ │ ├── config/ │ │ │ └── config.go │ │ └── payment/ │ │ └── currency.go │ ├── 02_object_orgy.go │ └── 03_feature_envy.go ├── ch02/ │ ├── 01_single_responsibility_principle/ │ │ ├── 01_responsibility_vs_change.go │ │ ├── 02_responsibility_vs_change.go │ │ ├── 03_responsibility_vs_change.go │ │ ├── 04_long_method.go │ │ ├── 04_long_method_test.go │ │ └── 05_srp_method.go │ ├── 02_open_closed_principle/ │ │ ├── 01_open_closed_failure.go │ │ ├── 02_open_closed_success.go │ │ ├── 03_shotgun_surgery.go │ │ ├── 04_after_shotgun_surgery.go │ │ ├── 05_composition.go │ │ ├── 06_handler_struct.go │ │ └── 07_handler_func.go │ ├── 03_liskov_substitution_principle/ │ │ ├── 01_violation/ │ │ │ └── example.go │ │ ├── 02_fixed/ │ │ │ └── example.go │ │ ├── 03_fixed/ │ │ │ └── example.go │ │ ├── 04_behaviour.go │ │ └── 05_behaviour_fixed.go │ └── 04_interface_segregation_principle/ │ ├── 01_fat_interface.go │ ├── 02_thin_interface.go │ ├── 03_repeated_inputs.go │ ├── 04_repeated_inputs.go │ ├── 05_repeated_inputs.go │ └── 06_implicit_interfaces.go ├── ch03/ │ ├── 01_optimizing_for_humans/ │ │ ├── 01_not_so_simple.go │ │ ├── 02_start_simple.go │ │ ├── 03_too_abstract.go │ │ ├── 04_common_concept.go │ │ ├── 05_boolean_param.go │ │ ├── 06_hidden_boolean.go │ │ ├── 07_wide_formatter.go │ │ ├── 08_thin_formatters.go │ │ └── 09_extra_config.go │ ├── 02_unit_tests/ │ │ ├── 01_loader.go │ │ ├── 02_language_feature.go │ │ ├── 03_simple_test.go │ │ ├── 04_test_from_api.go │ │ ├── 05_repeated_code.go │ │ ├── 06_tdt.go │ │ ├── 07_person_loader.go │ │ ├── 08_stub.go │ │ ├── 09_stub_tdt.go │ │ └── 10_mocks.go │ ├── 03_test_induced_damage/ │ │ ├── 01_io_closer.go │ │ └── 02_json.go │ ├── 04_visualizing_dependencies/ │ │ └── depgraph.sh │ └── fake.go ├── ch04/ │ ├── 01_welcome/ │ │ ├── 01_bad_names.go │ │ ├── 02_improved_names.go │ │ ├── 03_long_method.go │ │ ├── 04_long_method_test.go │ │ └── 05_short_methods.go │ ├── 03_known_issues/ │ │ ├── 01_data_and_rest/ │ │ │ └── get_example.go │ │ └── 02_config_coupling/ │ │ ├── config.go │ │ └── currency/ │ │ └── currency.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── data.go │ │ │ │ │ └── data_test.go │ │ │ │ ├── exchange/ │ │ │ │ │ └── converter.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ └── go_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ └── list_test.go │ │ │ │ └── register/ │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── common_test.go │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ └── main.go │ └── fake.go ├── ch05/ │ ├── 02_advantages/ │ │ ├── 01_function.go │ │ ├── 02_monkey_patched.go │ │ ├── 03_injected_lambda.go │ │ ├── 04_as_object.go │ │ ├── 05_math_rand.go │ │ └── 06_math_rand_test.go │ ├── 03_applying/ │ │ ├── 01_simple_sqlmock_test.go │ │ └── 02_load.go │ ├── 04_disadvantages/ │ │ ├── 01_verbose.go │ │ ├── 02_verbose_test.go │ │ └── 03_refactored_test.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── data.go │ │ │ │ │ └── data_test.go │ │ │ │ ├── exchange/ │ │ │ │ │ └── converter.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ └── go_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ └── list_test.go │ │ │ │ └── register/ │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── common_test.go │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ └── main.go │ └── fake.go ├── ch06/ │ ├── 01_constructor_injection/ │ │ ├── 01_welcome_email.go │ │ ├── 01_welcome_email_test.go │ │ ├── 02_mailer_interface.go │ │ ├── 03_sender_interface.go │ │ └── 05_duck_typing.go │ ├── 02_advantages/ │ │ ├── 01_easy_to_implement.go │ │ ├── 01_easy_to_implement_example_test.go │ │ ├── 02_easy_to_implement.go │ │ ├── 02_easy_to_implement_example_test.go │ │ ├── 03_predictable.go │ │ ├── 04_predictable.go │ │ ├── 05_encapsulation.go │ │ └── 06_encapsulation.go │ ├── 03_applying/ │ │ ├── 01/ │ │ │ ├── 01_register_handler_before.go │ │ │ ├── data/ │ │ │ │ └── person.go │ │ │ └── register/ │ │ │ └── register.go │ │ ├── 02/ │ │ │ ├── 01_register_handler.go │ │ │ ├── data/ │ │ │ │ └── person.go │ │ │ └── register/ │ │ │ └── register.go │ │ ├── 03/ │ │ │ ├── data/ │ │ │ │ └── person.go │ │ │ ├── mock_register_model_test.go │ │ │ └── register_test.go │ │ ├── 04/ │ │ │ ├── data/ │ │ │ │ └── person.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── register.go │ │ │ └── register_test.go │ │ └── 05/ │ │ ├── data/ │ │ │ └── person.go │ │ ├── fakes.go │ │ ├── get/ │ │ │ └── getter.go │ │ ├── list/ │ │ │ └── lister.go │ │ ├── register/ │ │ │ └── registerer.go │ │ └── server.go │ ├── 04_disadvantages/ │ │ ├── 01_lots_of_changes.go │ │ ├── 02_overuse.go │ │ ├── 03_non_obvious.go │ │ ├── 04_non_obvious_example_test.go │ │ └── 05_constructors.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── data.go │ │ │ │ │ └── data_test.go │ │ │ │ ├── exchange/ │ │ │ │ │ └── converter.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ └── go_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ └── list_test.go │ │ │ │ └── register/ │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mock_get_model_test.go │ │ │ ├── mock_list_model_test.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ └── main.go │ ├── fake.go │ └── pcov-html ├── ch07/ │ ├── 01_method_injection/ │ │ ├── 01_fprint.go │ │ ├── 02_http_request.go │ │ ├── 03_fprint.go │ │ ├── 04_http_request.go │ │ ├── 05_timestamp_writer_v1.go │ │ ├── 06_timestamp_writer_v2.go │ │ └── 07_timestamp_writer_v3.go │ ├── 02_advantages/ │ │ ├── 01_handler_v1.go │ │ ├── 02_handler_v2.go │ │ ├── 03_handler_v3.go │ │ ├── 04_context_influence.go │ │ └── 05_person_loader.go │ ├── 04_disadvantages/ │ │ ├── 01_data_struct.go │ │ ├── 02_ux_improvement.go │ │ ├── 03_many_params.go │ │ └── 04_many_params_v2.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── data.go │ │ │ │ │ └── data_test.go │ │ │ │ ├── exchange/ │ │ │ │ │ └── converter.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ └── go_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ └── list_test.go │ │ │ │ └── register/ │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mock_get_model_test.go │ │ │ ├── mock_list_model_test.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ └── main.go │ └── fake.go ├── ch08/ │ ├── 01_config_injection/ │ │ ├── 01_long_constructor.go │ │ ├── 02_by_config_example.go │ │ └── 03_shared_params.go │ ├── 02_advantages/ │ │ ├── 01_injected_config/ │ │ │ ├── 01.go │ │ │ └── 01_test.go │ │ ├── 02_config_injection/ │ │ │ ├── 02.go │ │ │ └── 02_test.go │ │ ├── 03_long_constructor.go │ │ ├── 04_by_config_example.go │ │ ├── config/ │ │ │ └── config.go │ │ ├── logging/ │ │ │ └── logger.go │ │ └── stats/ │ │ └── stats.go │ ├── 03_applying/ │ │ ├── 01_define_register_config.go │ │ ├── 02_register_with_config_injection.go │ │ ├── 03_model_before_data_changes.go │ │ ├── 04_test_config_link_to_config_package.go │ │ ├── 05_result_payload.json │ │ └── 06_simple_test_server.go │ ├── 04_disadvantages/ │ │ ├── 01_leaking_details.go │ │ ├── 02_hiding_details.go │ │ ├── 03_unclear_lifecycle.go │ │ ├── 04_clear_lifecycle.go │ │ └── 05_layers.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── data.go │ │ │ │ │ └── data_test.go │ │ │ │ ├── exchange/ │ │ │ │ │ ├── converter.go │ │ │ │ │ ├── converter_ext_bounday_test.go │ │ │ │ │ └── converter_int_bounday_test.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ └── go_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ └── list_test.go │ │ │ │ └── register/ │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mock_get_model_test.go │ │ │ ├── mock_list_model_test.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ └── main.go │ └── fake.go ├── ch09/ │ ├── 01_jit_injection/ │ │ ├── 01_injecting_db.go │ │ ├── 01_injecting_db_test.go │ │ ├── 02_injecting_business_logic.go │ │ ├── 03_injecting_db_jit.go │ │ ├── 03_injecting_db_jit_test.go │ │ └── 04_noop_debugger.go │ ├── 02_advantages/ │ │ ├── 01_long_constructor.go │ │ ├── 02_short_constructor.go │ │ ├── 03_optional_dep_without_jitdi.go │ │ ├── 04_optional_dep_with_jitdi.go │ │ ├── 05_loader.go │ │ ├── 06_global_variable/ │ │ │ └── 06_global_variable.go │ │ ├── 07_global_variable_jit/ │ │ │ ├── 07_global_variable_jit.go │ │ │ └── 07_global_variable_jit_test.go │ │ ├── 08_car_v1.go │ │ └── 09_car_v2.go │ ├── 03_applying/ │ │ ├── 01_commands.sh │ │ ├── 02_coverage.txt │ │ └── 03_initial_dao.go │ ├── 04_disadvantages/ │ │ ├── 01_uncertain_init_state.go │ │ ├── 02_certain_init_state.go │ │ ├── 03_cpool_slow_constructor.go │ │ └── 04_get_pool_with_once.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── dao.go │ │ │ │ │ ├── data.go │ │ │ │ │ ├── data_test.go │ │ │ │ │ └── tracker.go │ │ │ │ ├── exchange/ │ │ │ │ │ ├── converter.go │ │ │ │ │ ├── converter_ext_bounday_test.go │ │ │ │ │ └── converter_int_bounday_test.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ ├── go_test.go │ │ │ │ │ └── mock_my_loader_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ ├── list_test.go │ │ │ │ │ └── mock_my_loader_test.go │ │ │ │ └── register/ │ │ │ │ ├── mock_my_saver_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mock_get_model_test.go │ │ │ ├── mock_list_model_test.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ └── main.go │ └── fake.go ├── ch10/ │ ├── 01_intro_to_wire/ │ │ ├── 01_simple/ │ │ │ ├── main.go │ │ │ ├── wire.go │ │ │ └── wire_gen.go │ │ ├── 02_params/ │ │ │ ├── main.go │ │ │ ├── wire.go │ │ │ └── wire_gen.go │ │ ├── 03_error/ │ │ │ ├── main.go │ │ │ ├── wire.go │ │ │ └── wire_gen.go │ │ └── 04_without_pset/ │ │ ├── main.go │ │ ├── wire.go │ │ └── wire_gen.go │ ├── 02_advantages/ │ │ ├── 01_dig/ │ │ │ └── main.go │ │ └── 02_instantiation_order/ │ │ ├── handler.go │ │ ├── injectors.go │ │ ├── main.go │ │ ├── model.go │ │ ├── providers.go │ │ └── wire_gen.go │ ├── 03_applying/ │ │ ├── 01_before_config/ │ │ │ └── main.go │ │ ├── 02_after_config/ │ │ │ ├── main.go │ │ │ ├── wire.go │ │ │ └── wire_gen.go │ │ ├── 03_after_exchange/ │ │ │ ├── main.go │ │ │ └── wire.go │ │ ├── 04_after_model/ │ │ │ ├── main.go │ │ │ └── wire.go │ │ ├── 05_after_rest/ │ │ │ ├── main.go │ │ │ ├── wire.go │ │ │ └── wire_gen.go │ │ ├── 06_build_tag.go │ │ ├── 06_build_tag_inverse.go │ │ └── 06_main.go │ ├── 04_disadvantages/ │ │ └── 01_complexity/ │ │ └── main.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── dao.go │ │ │ │ │ ├── data.go │ │ │ │ │ ├── data_test.go │ │ │ │ │ └── tracker.go │ │ │ │ ├── exchange/ │ │ │ │ │ ├── converter.go │ │ │ │ │ ├── converter_ext_bounday_test.go │ │ │ │ │ └── converter_int_bounday_test.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ ├── go_test.go │ │ │ │ │ └── mock_my_loader_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ ├── list_test.go │ │ │ │ │ └── mock_my_loader_test.go │ │ │ │ └── register/ │ │ │ │ ├── mock_my_saver_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mock_get_model_test.go │ │ │ ├── mock_list_model_test.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ ├── main.go │ │ ├── main_test.go │ │ ├── wire.go │ │ └── wire_gen.go │ └── fake.go ├── ch11/ │ ├── 01_di_induced_damage/ │ │ ├── 01_long_param/ │ │ │ └── 01_long_param.go │ │ ├── 02_long_param/ │ │ │ └── 01_long_param.go │ │ ├── 03_long_param/ │ │ │ └── 01_long_param.go │ │ ├── 04_long_param/ │ │ │ ├── 01_long_param.go │ │ │ └── 01_long_param_test.go │ │ ├── 05_inject_sql/ │ │ │ └── 01_interface.go │ │ ├── 06_inject_sql/ │ │ │ ├── 01_interface.go │ │ │ ├── 02_implementation.go │ │ │ ├── 02_implementation_test.go │ │ │ ├── dao.go │ │ │ ├── data.go │ │ │ └── data_test.go │ │ ├── 07_needless_indirection/ │ │ │ └── example_test.go │ │ ├── 08_needless_indirection/ │ │ │ ├── 01_mux.go │ │ │ ├── 01_mux_test.go │ │ │ └── mock_my_mux_test.go │ │ ├── 09_needless_indirection/ │ │ │ ├── 01_mux.go │ │ │ └── 01_mux_test.go │ │ ├── 10_needless_indirection/ │ │ │ ├── 01_mux_e2e.go │ │ │ └── 01_mux_e2e_test.go │ │ └── 11_service_locator/ │ │ ├── 01_service_locator.go │ │ └── 02_usage.go │ ├── 02_premature_future/ │ │ └── get.go │ ├── 03_mocking_http_requests/ │ │ ├── converter.go │ │ ├── converter_test.go │ │ └── mock_requester_test.go │ └── acme/ │ ├── internal/ │ │ ├── config/ │ │ │ ├── config.go │ │ │ └── config_test.go │ │ ├── logging/ │ │ │ └── logging.go │ │ ├── modules/ │ │ │ ├── data/ │ │ │ │ ├── dao.go │ │ │ │ ├── data.go │ │ │ │ ├── data_test.go │ │ │ │ └── tracker.go │ │ │ ├── exchange/ │ │ │ │ ├── converter.go │ │ │ │ ├── converter_ext_bounday_test.go │ │ │ │ └── converter_int_bounday_test.go │ │ │ ├── get/ │ │ │ │ ├── get.go │ │ │ │ ├── go_test.go │ │ │ │ └── mock_my_loader_test.go │ │ │ ├── list/ │ │ │ │ ├── list.go │ │ │ │ ├── list_test.go │ │ │ │ └── mock_my_loader_test.go │ │ │ └── register/ │ │ │ ├── mock_exchanger_test.go │ │ │ ├── mock_my_saver_test.go │ │ │ ├── register.go │ │ │ └── register_test.go │ │ └── rest/ │ │ ├── get.go │ │ ├── get_test.go │ │ ├── list.go │ │ ├── list_test.go │ │ ├── mock_get_model_test.go │ │ ├── mock_list_model_test.go │ │ ├── mock_register_model_test.go │ │ ├── not_found.go │ │ ├── not_found_test.go │ │ ├── register.go │ │ ├── register_test.go │ │ └── server.go │ ├── main.go │ ├── main_test.go │ ├── wire.go │ └── wire_gen.go ├── ch12/ │ ├── 01_improvements/ │ │ └── 01_test_logging_test.go │ ├── 03_testing/ │ │ ├── 01_mock_get_model.go │ │ ├── 02_coverage_ch04.txt │ │ ├── 03_coverage_ch11.txt │ │ ├── 04_coverage_config.htm │ │ ├── 04_coverage_data.htm │ │ ├── 04_coverage_exchange.htm │ │ ├── 04_coverage_get.htm │ │ ├── 04_coverage_list.htm │ │ ├── 04_coverage_main.htm │ │ ├── 04_coverage_register.htm │ │ └── 04_coverage_rest.htm │ ├── 04_new_service/ │ │ └── 01_data_with_cache/ │ │ ├── dao.go │ │ ├── data.go │ │ └── internal/ │ │ ├── cache/ │ │ │ └── cache.go │ │ └── logging/ │ │ └── logging.go │ ├── acme/ │ │ ├── internal/ │ │ │ ├── config/ │ │ │ │ ├── config.go │ │ │ │ └── config_test.go │ │ │ ├── logging/ │ │ │ │ └── logging.go │ │ │ ├── modules/ │ │ │ │ ├── data/ │ │ │ │ │ ├── dao.go │ │ │ │ │ ├── data.go │ │ │ │ │ ├── data_test.go │ │ │ │ │ └── tracker.go │ │ │ │ ├── exchange/ │ │ │ │ │ ├── converter.go │ │ │ │ │ ├── converter_ext_bounday_test.go │ │ │ │ │ └── converter_int_bounday_test.go │ │ │ │ ├── get/ │ │ │ │ │ ├── get.go │ │ │ │ │ ├── go_test.go │ │ │ │ │ └── mock_my_loader_test.go │ │ │ │ ├── list/ │ │ │ │ │ ├── list.go │ │ │ │ │ ├── list_test.go │ │ │ │ │ └── mock_my_loader_test.go │ │ │ │ └── register/ │ │ │ │ ├── mock_exchanger_test.go │ │ │ │ ├── mock_my_saver_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ └── rest/ │ │ │ ├── get.go │ │ │ ├── get_test.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mock_get_model_test.go │ │ │ ├── mock_list_model_test.go │ │ │ ├── mock_register_model_test.go │ │ │ ├── not_found.go │ │ │ ├── not_found_test.go │ │ │ ├── register.go │ │ │ ├── register_test.go │ │ │ └── server.go │ │ ├── main.go │ │ ├── main_test.go │ │ ├── wire.go │ │ └── wire_gen.go │ └── fake.go ├── default-config.json ├── fake.go ├── resources/ │ └── create.sql └── vendor/ ├── github.com/ │ ├── DATA-DOG/ │ │ └── go-sqlmock/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── argument.go │ │ ├── driver.go │ │ ├── expectations.go │ │ ├── expectations_before_go18.go │ │ ├── expectations_go18.go │ │ ├── result.go │ │ ├── rows.go │ │ ├── rows_go18.go │ │ ├── sqlmock.go │ │ ├── sqlmock_go18.go │ │ ├── statement.go │ │ └── util.go │ ├── davecgh/ │ │ └── go-spew/ │ │ ├── LICENSE │ │ └── spew/ │ │ ├── bypass.go │ │ ├── bypasssafe.go │ │ ├── common.go │ │ ├── config.go │ │ ├── doc.go │ │ ├── dump.go │ │ ├── format.go │ │ └── spew.go │ ├── go-sql-driver/ │ │ └── mysql/ │ │ ├── AUTHORS │ │ ├── CHANGELOG.md │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── appengine.go │ │ ├── buffer.go │ │ ├── collations.go │ │ ├── connection.go │ │ ├── connection_go18.go │ │ ├── const.go │ │ ├── driver.go │ │ ├── dsn.go │ │ ├── errors.go │ │ ├── fields.go │ │ ├── infile.go │ │ ├── packets.go │ │ ├── result.go │ │ ├── rows.go │ │ ├── statement.go │ │ ├── transaction.go │ │ ├── utils.go │ │ ├── utils_go17.go │ │ └── utils_go18.go │ ├── google/ │ │ └── wire/ │ │ ├── AUTHORS │ │ ├── CODE_OF_CONDUCT.md │ │ ├── CONTRIBUTING.md │ │ ├── CONTRIBUTORS │ │ ├── LICENSE │ │ ├── README.md │ │ ├── go.mod │ │ ├── go.sum │ │ └── wire.go │ ├── gorilla/ │ │ ├── context/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── context.go │ │ │ └── doc.go │ │ └── mux/ │ │ ├── ISSUE_TEMPLATE.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── context_gorilla.go │ │ ├── context_native.go │ │ ├── doc.go │ │ ├── middleware.go │ │ ├── mux.go │ │ ├── regexp.go │ │ ├── route.go │ │ └── test_helpers.go │ ├── pmezard/ │ │ └── go-difflib/ │ │ ├── LICENSE │ │ └── difflib/ │ │ └── difflib.go │ └── stretchr/ │ ├── objx/ │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── accessors.go │ │ ├── constants.go │ │ ├── conversions.go │ │ ├── doc.go │ │ ├── map.go │ │ ├── mutations.go │ │ ├── security.go │ │ ├── tests.go │ │ ├── type_specific_codegen.go │ │ └── value.go │ └── testify/ │ ├── LICENSE │ ├── assert/ │ │ ├── assertion_format.go │ │ ├── assertion_format.go.tmpl │ │ ├── assertion_forward.go │ │ ├── assertion_forward.go.tmpl │ │ ├── assertions.go │ │ ├── doc.go │ │ ├── errors.go │ │ ├── forward_assertions.go │ │ └── http_assertions.go │ ├── mock/ │ │ ├── doc.go │ │ └── mock.go │ └── require/ │ ├── doc.go │ ├── forward_requirements.go │ ├── require.go │ ├── require.go.tmpl │ ├── require_forward.go │ ├── require_forward.go.tmpl │ └── requirements.go ├── go.uber.org/ │ └── dig/ │ ├── CHANGELOG.md │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── check_license.sh │ ├── cycle.go │ ├── dig.go │ ├── doc.go │ ├── error.go │ ├── glide.yaml │ ├── internal/ │ │ ├── digreflect/ │ │ │ └── func.go │ │ └── dot/ │ │ └── graph.go │ ├── param.go │ ├── result.go │ ├── stringer.go │ ├── types.go │ └── version.go ├── google.golang.org/ │ └── appengine/ │ ├── LICENSE │ └── cloudsql/ │ ├── cloudsql.go │ ├── cloudsql_classic.go │ └── cloudsql_vm.go └── vendor.json