gitextract_cnldqe8r/ ├── .gitignore ├── .gitmodules ├── 1-basics/ │ ├── 1_basics/ │ │ ├── 01_vars_1/ │ │ │ └── 01_vars_1.go │ │ ├── 02_vars_2/ │ │ │ └── 02_vars_2.go │ │ ├── 03_const/ │ │ │ └── 03_const.go │ │ ├── 04_pointers/ │ │ │ └── 04_pointers.go │ │ ├── 05_array/ │ │ │ └── 05_array.go │ │ ├── 06_slice_1/ │ │ │ └── 06_slice_1.go │ │ ├── 07_slice_2/ │ │ │ └── 07_slice_2.go │ │ ├── 08_strings/ │ │ │ └── 08_strings.go │ │ ├── 09_map/ │ │ │ └── 09_map.go │ │ ├── 10_control/ │ │ │ └── 10_control.go │ │ ├── 11_loop/ │ │ │ └── 11_loop.go │ │ ├── 12_types/ │ │ │ └── 12_types.go │ │ └── 13_generic/ │ │ ├── 1_generic/ │ │ │ └── main.go │ │ └── 2_methods/ │ │ └── methods.go │ ├── 2_functions/ │ │ ├── 1_functions/ │ │ │ └── 1_functions.go │ │ ├── 2_firstclass/ │ │ │ └── 2_firstclass.go │ │ ├── 3_defer/ │ │ │ └── 3_defer.go │ │ └── 4_recover/ │ │ └── 4_recover.go │ ├── 3_structs/ │ │ ├── 1_structs/ │ │ │ └── 1_structs.go │ │ └── 2_methods/ │ │ └── 2_methods.go │ ├── 4_interfaces/ │ │ ├── 1.2_basic_sort/ │ │ │ └── 1_sort.go │ │ ├── 1_basic/ │ │ │ └── 1_basic.go │ │ ├── 2_many/ │ │ │ └── 2_many.go │ │ ├── 3_embed/ │ │ │ └── 3_embed.go │ │ ├── 4_cast/ │ │ │ └── 4_cast.go │ │ ├── 5_empty_1/ │ │ │ └── 5_empty_1.go │ │ └── 6_empty_2/ │ │ └── 6_empty_2.go │ ├── 5_visibility/ │ │ ├── dir.txt │ │ ├── main.go │ │ └── person/ │ │ ├── func.go │ │ └── person.go │ ├── 6_uniq/ │ │ ├── basic/ │ │ │ ├── data.txt │ │ │ ├── data_bad.txt │ │ │ ├── data_map.txt │ │ │ └── main.go │ │ └── with_tests/ │ │ ├── data.txt │ │ ├── data_bad.txt │ │ ├── data_map.txt │ │ ├── main.go │ │ └── main_test.go │ ├── go-intro.key │ ├── homework/ │ │ └── readme.md │ └── readme.md ├── 10-performance/ │ ├── 1_reflect/ │ │ ├── 1_print/ │ │ │ └── reflect_1.go │ │ └── 2_unpack/ │ │ └── reflect_2.go │ ├── 2_codegen/ │ │ ├── gen/ │ │ │ └── codegen.go │ │ └── pack/ │ │ ├── marshaller.go │ │ └── unpack.go │ ├── 3_perfomance_1/ │ │ ├── 1_unpack/ │ │ │ └── unpack_test.go │ │ ├── 2_prealloc/ │ │ │ └── prealloc_test.go │ │ ├── 3_pool/ │ │ │ └── pool_test.go │ │ ├── 4_string/ │ │ │ └── string_test.go │ │ └── 5_json/ │ │ ├── json_test.go │ │ ├── struct.go │ │ └── struct_easyjson.go │ ├── 4_perfomance_2/ │ │ ├── 1_optimize/ │ │ │ ├── pprof_1.go │ │ │ └── pprof_1.sh │ │ ├── 2_leak_grtn/ │ │ │ ├── pprof_2.go │ │ │ └── pprof_2.sh │ │ ├── 3_tracing/ │ │ │ └── tracing.go │ │ └── note.txt │ ├── 5_testing/ │ │ ├── cover.html │ │ ├── coverage_test.go │ │ └── main.go │ ├── 6_xml_stream/ │ │ ├── main.go │ │ └── xml_test.go │ ├── 7_inline_escape/ │ │ └── main.go │ ├── 8_cgo/ │ │ ├── 1_example/ │ │ │ └── main.go │ │ ├── 2_performance/ │ │ │ └── main.go │ │ ├── 3_usage/ │ │ │ ├── README.md │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── README.md │ └── readme.md ├── 2-async/ │ ├── 0_basic_error_handling/ │ │ ├── 1_ignore_errors/ │ │ │ └── main.go │ │ ├── 2_panic/ │ │ │ └── main.go │ │ ├── 3_handling/ │ │ │ └── main.go │ │ └── 4_return/ │ │ └── main.go │ ├── 1_async/ │ │ ├── 10_context_cancel/ │ │ │ └── context_cancel.go │ │ ├── 10_context_timeout/ │ │ │ ├── context_parent/ │ │ │ │ └── main.go │ │ │ └── context_timeout.go │ │ ├── 11_errgroup_1/ │ │ │ └── errgroup_1.go │ │ ├── 11_errgroup_2/ │ │ │ └── errgroup_2.go │ │ ├── 12_atomic_1/ │ │ │ └── atomic_1.go │ │ ├── 12_atomic_2/ │ │ │ ├── atomic_2.go │ │ │ └── with_bench/ │ │ │ └── mutex_test.go │ │ ├── 13_ratelim/ │ │ │ └── ratelim.go │ │ ├── 14_once/ │ │ │ └── once.go │ │ ├── 1_goroutines/ │ │ │ ├── goroutines.go │ │ │ ├── i_ptr/ │ │ │ │ └── main.go │ │ │ └── mem/ │ │ │ └── main.go │ │ ├── 1_goroutines_2/ │ │ │ └── goroutines.go │ │ ├── 2_chan/ │ │ │ └── chan_1.go │ │ ├── 2_chan_2/ │ │ │ └── chan_2.go │ │ ├── 3_workerpool/ │ │ │ ├── 1_workerpool.go │ │ │ └── 2_workerpool_reusable.go │ │ ├── 4_race_1/ │ │ │ └── race_1.go │ │ ├── 4_race_2/ │ │ │ ├── race_2.go │ │ │ └── race_flag/ │ │ │ └── working_race.go │ │ ├── 4_race_3/ │ │ │ └── race_3.go │ │ ├── 4_race_3_bench/ │ │ │ └── race_test.go │ │ ├── 5_tick/ │ │ │ └── tick.go │ │ ├── 5_tick_example/ │ │ │ ├── 5_ping_pong/ │ │ │ │ └── main.go │ │ │ └── main.go │ │ ├── 6_afterfunc/ │ │ │ └── afterfunc.go │ │ ├── 7_select_1/ │ │ │ └── select_1.go │ │ ├── 7_select_2/ │ │ │ └── select_2.go │ │ ├── 7_select_2_new/ │ │ │ ├── close_buff/ │ │ │ │ └── main.go │ │ │ └── select_2_new.go │ │ ├── 7_select_3/ │ │ │ ├── close_all/ │ │ │ │ └── main.go │ │ │ ├── close_signal/ │ │ │ │ └── main.go │ │ │ └── select_3.go │ │ ├── 8_wait_1/ │ │ │ └── wait_1.go │ │ ├── 8_wait_2/ │ │ │ ├── ping_pong/ │ │ │ │ └── main.go │ │ │ └── wait_2.go │ │ ├── 8_wait_3/ │ │ │ └── wait_3.go │ │ └── 9_timeout/ │ │ └── timeout.go │ └── readings_2.md ├── 3-web/ │ ├── 0_json/ │ │ ├── 0_simple_json/ │ │ │ └── simple_json.go │ │ ├── 1_struct_tags/ │ │ │ └── struct_tags.go │ │ ├── 2_custom/ │ │ │ └── custom.go │ │ └── 3_dynamic/ │ │ └── dynamic.go │ ├── 1_net/ │ │ └── net_listen.go │ ├── 2_http/ │ │ ├── 0_http_server/ │ │ │ ├── 0_basic/ │ │ │ │ └── basic.go │ │ │ ├── 1_pages/ │ │ │ │ └── pages.go │ │ │ ├── 2_servehttp/ │ │ │ │ └── servehttp.go │ │ │ ├── 3_mux/ │ │ │ │ └── mux.go │ │ │ └── 4_servers/ │ │ │ └── servers.go │ │ ├── 1_request/ │ │ │ ├── 0_get/ │ │ │ │ └── get.go │ │ │ ├── 1_post/ │ │ │ │ └── post.go │ │ │ ├── 2_cookies/ │ │ │ │ └── cookies.go │ │ │ └── 3_headers/ │ │ │ └── headers.go │ │ ├── 2_http_client/ │ │ │ └── client.go │ │ ├── 3_files/ │ │ │ ├── 0_file_upload/ │ │ │ │ └── file_upload.go │ │ │ └── 1_static/ │ │ │ ├── static/ │ │ │ │ └── super_secret_password │ │ │ └── static.go │ │ └── 4_httptest/ │ │ ├── 0_client/ │ │ │ └── client_test.go │ │ └── 1_server/ │ │ └── server_test.go │ ├── 3_template/ │ │ ├── 0_inline/ │ │ │ └── inline.go │ │ ├── 1_file/ │ │ │ ├── file.go │ │ │ └── users.html │ │ ├── 2_func/ │ │ │ ├── func.go │ │ │ └── func.html │ │ └── 3_method/ │ │ ├── method.go │ │ └── method.html │ ├── 4_json_http/ │ │ ├── main.go │ │ └── main_test.go │ └── readings_3.md ├── 4-api/ │ ├── 1_rpc/ │ │ ├── jsonrpc/ │ │ │ ├── books.go │ │ │ └── server.go │ │ ├── main.go │ │ └── net-rpc/ │ │ ├── books.go │ │ ├── client.go │ │ └── server.go │ ├── 2_rest/ │ │ ├── books.go │ │ └── main.go │ ├── 3_graphql/ │ │ ├── gqlgen/ │ │ │ ├── generated.go │ │ │ ├── gqlgen.yml │ │ │ ├── models_gen.go │ │ │ ├── resolver.go │ │ │ ├── schema.graphql │ │ │ └── server/ │ │ │ └── server.go │ │ ├── gqlgen_full/ │ │ │ ├── gqlgen1/ │ │ │ │ ├── generated.go │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── gqlgen.yml │ │ │ │ ├── models_gen.go │ │ │ │ ├── resolver.go │ │ │ │ ├── schema.graphql │ │ │ │ └── server/ │ │ │ │ └── server.go │ │ │ ├── gqlgen2/ │ │ │ │ ├── generated.go │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── gqlgen.yml │ │ │ │ ├── models_gen.go │ │ │ │ ├── photo.go │ │ │ │ ├── resolver.go │ │ │ │ ├── schema.graphql │ │ │ │ ├── schema_alt.graphql │ │ │ │ └── server/ │ │ │ │ └── server.go │ │ │ ├── gqlgen3/ │ │ │ │ ├── generated.go │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── gqlgen.yml │ │ │ │ ├── models_gen.go │ │ │ │ ├── photo.go │ │ │ │ ├── resolver.go │ │ │ │ ├── schema.graphql │ │ │ │ ├── schema_alt.graphql │ │ │ │ ├── server/ │ │ │ │ │ └── server.go │ │ │ │ └── userloader_gen.go │ │ │ ├── gqlgen4/ │ │ │ │ ├── generated.go │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── gqlgen.yml │ │ │ │ ├── models_gen.go │ │ │ │ ├── photo.go │ │ │ │ ├── queries.txt │ │ │ │ ├── resolver.go │ │ │ │ ├── schema.graphql │ │ │ │ ├── server/ │ │ │ │ │ └── server.go │ │ │ │ └── userloader_gen.go │ │ │ ├── gqlgen5/ │ │ │ │ ├── generated.go │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── gqlgen.yml │ │ │ │ ├── models_gen.go │ │ │ │ ├── photo.go │ │ │ │ ├── queries.txt │ │ │ │ ├── resolver.go │ │ │ │ ├── schema.graphql │ │ │ │ ├── server/ │ │ │ │ │ └── server.go │ │ │ │ ├── test_file.txt │ │ │ │ └── userloader_gen.go │ │ │ ├── gqlgen6/ │ │ │ │ ├── generated.go │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── gqlgen.yml │ │ │ │ ├── models_gen.go │ │ │ │ ├── photo.go │ │ │ │ ├── queries.txt │ │ │ │ ├── resolver.go │ │ │ │ ├── schema.graphql │ │ │ │ ├── server/ │ │ │ │ │ └── server.go │ │ │ │ ├── test_file.txt │ │ │ │ └── userloader_gen.go │ │ │ └── note.txt │ │ ├── graphql-go/ │ │ │ └── main.go │ │ └── intro/ │ │ ├── instagram_gql.txt │ │ ├── instagram_sql_resp.json │ │ ├── readme.md │ │ └── schema.public.graphql │ ├── 4_swagger/ │ │ ├── docs/ │ │ │ ├── docs.go │ │ │ ├── swagger/ │ │ │ │ ├── swagger.json │ │ │ │ └── swagger.yaml │ │ │ ├── swagger.json │ │ │ └── swagger.yaml │ │ ├── main.go │ │ └── model/ │ │ └── user.go │ ├── 5_sessions/ │ │ └── main.go │ ├── 6_jwt/ │ │ └── main.go │ └── 7_oauth/ │ └── main.go ├── 5-architecture/ │ ├── 0_bad_example/ │ │ └── api.go │ ├── 10_crudapp/ │ │ ├── cmd/ │ │ │ └── crudapp/ │ │ │ └── main.go │ │ ├── file_tree.txt │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ ├── crudapp/ │ │ │ │ └── middleware/ │ │ │ │ ├── accesslog.go │ │ │ │ ├── auth.go │ │ │ │ └── panic.go │ │ │ └── pkg/ │ │ │ ├── items/ │ │ │ │ ├── delivery/ │ │ │ │ │ └── items.go │ │ │ │ ├── items.go │ │ │ │ └── repository/ │ │ │ │ └── repo.go │ │ │ ├── models/ │ │ │ │ ├── item.go │ │ │ │ ├── session.go │ │ │ │ └── user.go │ │ │ ├── session/ │ │ │ │ └── manager.go │ │ │ └── user/ │ │ │ ├── delivery/ │ │ │ │ ├── user.go │ │ │ │ └── user_test.go │ │ │ ├── mock/ │ │ │ │ └── mock_repo.go │ │ │ ├── repository/ │ │ │ │ └── user.go │ │ │ └── user.go │ │ ├── readme.md │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ ├── index.html │ │ └── login.html │ ├── 1_routers/ │ │ ├── 0_httprouter/ │ │ │ └── 0_httprouter.go │ │ ├── 1_fasthttp/ │ │ │ └── 1_fasthttp.go │ │ ├── 2_gorilla/ │ │ │ └── 2_gorilla.go │ │ └── 3_multiple/ │ │ └── 3_multiple.go │ ├── 2_middleware/ │ │ ├── 1_middleware/ │ │ │ └── 1_middleware.go │ │ └── 2_context_value/ │ │ └── 2_context_value.go │ ├── 3_errors/ │ │ ├── 1_basic_err/ │ │ │ └── 1_basic_err.go │ │ ├── 2_named_err/ │ │ │ └── 2_named_err.go │ │ ├── 3_pkg_err/ │ │ │ └── 3_pkg_err.go │ │ ├── 4_own_err/ │ │ │ └── 4_own_err.go │ │ └── 5_new_errors/ │ │ └── 5_new_errors.go │ ├── 4_validation/ │ │ └── validation.go │ ├── 5_logging/ │ │ └── main.go │ ├── 6_websockets/ │ │ ├── index.html │ │ └── main.go │ ├── 7_frameworks/ │ │ └── echo/ │ │ ├── main.go │ │ ├── middleware/ │ │ │ ├── error.go │ │ │ ├── panic.go │ │ │ ├── request_id.go │ │ │ └── session.go │ │ ├── model/ │ │ │ └── user.go │ │ └── user/ │ │ ├── delivery/ │ │ │ └── http/ │ │ │ ├── hander_test.go │ │ │ └── handler.go │ │ ├── repository/ │ │ │ └── memory.go │ │ ├── repository.go │ │ ├── usecase/ │ │ │ └── usecase.go │ │ ├── usecase.go │ │ └── usecase_mock.go │ └── readings_5.md ├── 6-databases/ │ ├── 00_databases/ │ │ ├── _kafka/ │ │ │ └── setup.sh │ │ ├── _mysql/ │ │ │ ├── injection_db.sql │ │ │ └── items.sql │ │ ├── _postgres/ │ │ │ └── items.sql │ │ └── docker-compose.yml │ ├── 01_mysql/ │ │ ├── main.go │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ └── index.html │ ├── 02_postgresql/ │ │ ├── main.go │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ └── index.html │ ├── 03_mysql_sql_injection/ │ │ └── main.go │ ├── 04_mysql_sqlmock/ │ │ ├── item_repo.go │ │ ├── item_repo_test.go │ │ ├── main.go │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ └── index.html │ ├── 05_gorm/ │ │ ├── main.go │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ └── index.html │ ├── 06_crudapp_db_tests/ │ │ ├── cmd/ │ │ │ └── crudapp/ │ │ │ └── main.go │ │ ├── pkg/ │ │ │ ├── handlers/ │ │ │ │ ├── handler.html │ │ │ │ ├── items.go │ │ │ │ ├── items_mock.go │ │ │ │ ├── items_test.go │ │ │ │ └── user.go │ │ │ ├── items/ │ │ │ │ ├── item.go │ │ │ │ ├── item_repo_test.go │ │ │ │ ├── repo_gorm.go │ │ │ │ ├── repo_mysql.go │ │ │ │ ├── repo_pgx.go │ │ │ │ └── repo_sqlx.go │ │ │ ├── middleware/ │ │ │ │ ├── accesslog.go │ │ │ │ ├── auth.go │ │ │ │ └── panic.go │ │ │ ├── session/ │ │ │ │ ├── manager.go │ │ │ │ └── session.go │ │ │ └── user/ │ │ │ └── user.go │ │ ├── readme.md │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ ├── index.html │ │ └── login.html │ ├── 07_mongodb/ │ │ ├── main.go │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ └── index.html │ ├── 08_memcache/ │ │ └── memcache.go │ ├── 09_redis_simple/ │ │ └── cmds.go │ ├── 10_redis/ │ │ ├── main.go │ │ └── session.go │ ├── 11_rabbit/ │ │ ├── form/ │ │ │ └── form.go │ │ └── resizer/ │ │ └── resize_worker.go │ ├── 12_kafka/ │ │ ├── form/ │ │ │ └── form.go │ │ └── resizer/ │ │ └── resize_worker.go │ ├── 13_tarantool_simple/ │ │ ├── Dockerfile │ │ ├── app.lua │ │ └── main.go │ ├── 14_tarantool/ │ │ ├── main.go │ │ └── session.go │ ├── crudapp_mongo/ │ │ ├── cmd/ │ │ │ └── crudapp/ │ │ │ └── main.go │ │ ├── file_tree.txt │ │ ├── pkg/ │ │ │ ├── handlers/ │ │ │ │ ├── items.go │ │ │ │ ├── items_mock.go │ │ │ │ ├── items_test.go │ │ │ │ └── user.go │ │ │ ├── items/ │ │ │ │ ├── item.go │ │ │ │ └── repo_mongo.go │ │ │ ├── middleware/ │ │ │ │ ├── accesslog.go │ │ │ │ ├── auth.go │ │ │ │ └── panic.go │ │ │ ├── session/ │ │ │ │ ├── manager.go │ │ │ │ └── session.go │ │ │ └── user/ │ │ │ └── user.go │ │ ├── readme.md │ │ └── templates/ │ │ ├── create.html │ │ ├── edit.html │ │ ├── index.html │ │ └── login.html │ ├── readings_6.md │ ├── readme.md │ └── tcache/ │ ├── cache.go │ ├── main.go │ └── posts.go ├── 7-security/ │ ├── 1_passwords/ │ │ ├── 0_password.txt │ │ ├── 1_salt.go │ │ ├── 2_pass.go │ │ └── 2_pass_bench_test.go │ ├── 2_csrf/ │ │ ├── csrf.go │ │ └── csrf.txt │ ├── 3_csrf_token/ │ │ ├── csrf.go │ │ ├── token_crypt.go │ │ ├── token_jwt.go │ │ └── tokjen_hash.go │ ├── 4_xss/ │ │ └── xss.go │ ├── 5_xss_clean/ │ │ ├── login.txt │ │ └── xss_clean.go │ ├── 6_acl/ │ │ ├── acl_rbac.txt │ │ └── casbin/ │ │ ├── basic_model.conf │ │ ├── basic_policy.csv │ │ └── rbac.go │ └── 7_docker/ │ ├── .dockerignore │ ├── Dockerfile │ ├── Dockerfile.Multistage │ ├── code/ │ │ ├── go.mod │ │ └── main.go │ ├── docker-compose.yml │ ├── nginx/ │ │ └── nginx.conf │ └── readme.md ├── 8-microservices/ │ ├── 0_service/ │ │ ├── 1_step/ │ │ │ ├── main.go │ │ │ ├── run_test.go │ │ │ └── session.go │ │ └── 2_step/ │ │ ├── main.go │ │ ├── run_test.go │ │ └── session.go │ ├── 1_net-rpc/ │ │ ├── client/ │ │ │ ├── client.go │ │ │ ├── run_test.go │ │ │ └── session.go │ │ └── server/ │ │ ├── server.go │ │ └── session.go │ ├── 2_json-rpc/ │ │ ├── client/ │ │ │ ├── client.go │ │ │ ├── run_test.go │ │ │ └── session.go │ │ └── server/ │ │ ├── server.go │ │ └── session.go │ ├── 3_protobuf/ │ │ ├── main.go │ │ ├── session.pb.go │ │ └── session.proto │ ├── 4_grpc/ │ │ ├── client/ │ │ │ ├── main.go │ │ │ └── run_test.go │ │ ├── readme.md │ │ ├── server/ │ │ │ ├── server.go │ │ │ └── session.go │ │ └── session/ │ │ ├── session.pb.go │ │ ├── session.proto │ │ └── session_grpc.pb.go │ ├── 5_grpc_features/ │ │ ├── client/ │ │ │ └── client.go │ │ └── server/ │ │ ├── server.go │ │ └── session.go │ ├── 6_grpc_stream/ │ │ ├── client/ │ │ │ ├── client.go │ │ │ └── run_test.go │ │ ├── server/ │ │ │ ├── main.go │ │ │ ├── server.go │ │ │ └── translit.go │ │ └── translit/ │ │ ├── translit.pb.go │ │ ├── translit.proto │ │ └── translit_grpc.pb.go │ └── 7_grpc_loadbalance/ │ ├── client/ │ │ └── main.go │ ├── docker-compose.yml │ ├── readme.md │ └── server/ │ ├── server.go │ └── session.go ├── 9-monitoring/ │ ├── 0_services/ │ │ ├── alertmanager/ │ │ │ └── alertmanager.yml │ │ ├── alertmanager-bot/ │ │ │ └── templates/ │ │ │ └── default.tmpl │ │ ├── docker-compose.yml │ │ └── prometheus/ │ │ ├── alerts.yml │ │ └── prometheus.yml │ ├── 1_config/ │ │ ├── 1_flag/ │ │ │ └── flag.go │ │ ├── 2_json/ │ │ │ ├── config.json │ │ │ └── json_config.go │ │ ├── 3_ldflags/ │ │ │ └── ldflags.go │ │ ├── 4_viper/ │ │ │ ├── config.yml │ │ │ └── main.go │ │ └── 5_consul/ │ │ └── consul_config.go │ ├── 2_vault/ │ │ ├── main.go │ │ └── readme.md │ ├── 3_monitoring/ │ │ ├── expvars/ │ │ │ └── expvars.go │ │ ├── metrics/ │ │ │ └── context_monitoring.go │ │ ├── prometheus/ │ │ │ ├── alertmanager/ │ │ │ │ └── alertmanager.yml │ │ │ ├── main.go │ │ │ ├── prometheus/ │ │ │ │ ├── alerts.yml │ │ │ │ └── prometheus.yml │ │ │ └── readme.md │ │ └── sentry/ │ │ ├── echo/ │ │ │ └── main.go │ │ └── simple/ │ │ └── main.go │ └── 4_tracing/ │ └── jaeger_grpc/ │ ├── client/ │ │ └── main.go │ ├── readme.md │ ├── server/ │ │ ├── server.go │ │ └── session.go │ └── session/ │ ├── session.pb.go │ └── session.proto ├── README.md ├── go.mod └── go.sum