Full Code of gogf/gf for AI

master 766579d8688a cached
2095 files
10.3 MB
2.8M tokens
16948 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (11,248K chars total). Download the full file to get everything.
Repository: gogf/gf
Branch: master
Commit: 766579d8688a
Files: 2095
Total size: 10.3 MB

Directory structure:
gitextract_3xoiucv4/

├── .codecov.yml
├── .gitattributes
├── .gitee/
│   └── ISSUE_TEMPLATE
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── 00-bug.yml
│   │   ├── 01-enhance.yml
│   │   ├── 02-feature.yml
│   │   └── 03-question.yml
│   ├── PULL_REQUEST_TEMPLATE.MD
│   └── workflows/
│       ├── apollo/
│       │   ├── docker-compose.yml
│       │   └── sql/
│       │       ├── apolloconfigdb.sql
│       │       └── apolloportaldb.sql
│       ├── ci-main.yml
│       ├── ci-sub.yml
│       ├── codeql.yml
│       ├── consul/
│       │   ├── client.json
│       │   ├── docker-compose.yml
│       │   └── server.json
│       ├── format-code-on-push.yml
│       ├── gitee-sync.yml
│       ├── golangci-lint.yml
│       ├── issue-check-inactive.yml
│       ├── issue-close-inactive.yml
│       ├── issue-labeled.yml
│       ├── issue-remove-inactive.yml
│       ├── issue-remove-need-more-details.yml
│       ├── issue-translator.yml
│       ├── nacos/
│       │   ├── docker-compose.yml
│       │   └── env/
│       │       └── nacos.env
│       ├── redis/
│       │   └── docker-compose.yml
│       ├── release.yml
│       ├── scorecard.yml
│       ├── scripts/
│       │   ├── before_script.sh
│       │   ├── ci-main-clean.sh
│       │   ├── ci-main.sh
│       │   ├── ci-sub.sh
│       │   ├── docker-services.sh
│       │   ├── replace_examples_gomod.sh
│       │   └── update_version.sh
│       └── tag.yml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .make_tidy.sh
├── .make_version.sh
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.MD
├── README.zh_CN.MD
├── cmd/
│   └── gf/
│       ├── LICENSE
│       ├── Makefile
│       ├── README.MD
│       ├── README.zh_CN.MD
│       ├── gfcmd/
│       │   └── gfcmd.go
│       ├── go.mod
│       ├── go.sum
│       ├── go.work
│       ├── internal/
│       │   ├── cmd/
│       │   │   ├── cmd.go
│       │   │   ├── cmd_build.go
│       │   │   ├── cmd_doc.go
│       │   │   ├── cmd_docker.go
│       │   │   ├── cmd_env.go
│       │   │   ├── cmd_fix.go
│       │   │   ├── cmd_gen.go
│       │   │   ├── cmd_gen_ctrl.go
│       │   │   ├── cmd_gen_dao.go
│       │   │   ├── cmd_gen_enums.go
│       │   │   ├── cmd_gen_pb.go
│       │   │   ├── cmd_gen_pbentity.go
│       │   │   ├── cmd_gen_service.go
│       │   │   ├── cmd_init.go
│       │   │   ├── cmd_install.go
│       │   │   ├── cmd_pack.go
│       │   │   ├── cmd_run.go
│       │   │   ├── cmd_tpl.go
│       │   │   ├── cmd_up.go
│       │   │   ├── cmd_version.go
│       │   │   ├── cmd_z_init_test.go
│       │   │   ├── cmd_z_unit_build_test.go
│       │   │   ├── cmd_z_unit_env_test.go
│       │   │   ├── cmd_z_unit_fix_test.go
│       │   │   ├── cmd_z_unit_gen_ctrl_test.go
│       │   │   ├── cmd_z_unit_gen_dao_issue_test.go
│       │   │   ├── cmd_z_unit_gen_dao_sharding_test.go
│       │   │   ├── cmd_z_unit_gen_dao_test.go
│       │   │   ├── cmd_z_unit_gen_enums_test.go
│       │   │   ├── cmd_z_unit_gen_pb_test.go
│       │   │   ├── cmd_z_unit_gen_pbentity_test.go
│       │   │   ├── cmd_z_unit_gen_service_test.go
│       │   │   ├── cmd_z_unit_pack_test.go
│       │   │   ├── cmd_z_unit_run_test.go
│       │   │   ├── genctrl/
│       │   │   │   ├── genctrl.go
│       │   │   │   ├── genctrl_api_item.go
│       │   │   │   ├── genctrl_ast_parse.go
│       │   │   │   ├── genctrl_ast_parse_clear.go
│       │   │   │   ├── genctrl_calculate.go
│       │   │   │   ├── genctrl_generate_ctrl.go
│       │   │   │   ├── genctrl_generate_ctrl_clear.go
│       │   │   │   ├── genctrl_generate_interface.go
│       │   │   │   └── genctrl_generate_sdk.go
│       │   │   ├── gendao/
│       │   │   │   ├── gendao.go
│       │   │   │   ├── gendao_clear.go
│       │   │   │   ├── gendao_dao.go
│       │   │   │   ├── gendao_do.go
│       │   │   │   ├── gendao_entity.go
│       │   │   │   ├── gendao_gen_item.go
│       │   │   │   ├── gendao_structure.go
│       │   │   │   ├── gendao_table.go
│       │   │   │   ├── gendao_tag.go
│       │   │   │   └── gendao_test.go
│       │   │   ├── genenums/
│       │   │   │   ├── genenums.go
│       │   │   │   ├── genenums_parser.go
│       │   │   │   └── genenums_z_unit_test.go
│       │   │   ├── geninit/
│       │   │   │   ├── geninit.go
│       │   │   │   ├── geninit_ast.go
│       │   │   │   ├── geninit_downloader.go
│       │   │   │   ├── geninit_env.go
│       │   │   │   ├── geninit_generator.go
│       │   │   │   ├── geninit_git_downloader.go
│       │   │   │   ├── geninit_selector.go
│       │   │   │   ├── geninit_version.go
│       │   │   │   └── geninit_z_unit_test.go
│       │   │   ├── genpb/
│       │   │   │   ├── genpb.go
│       │   │   │   ├── genpb_controller.go
│       │   │   │   └── genpb_tag.go
│       │   │   ├── genpbentity/
│       │   │   │   └── genpbentity.go
│       │   │   ├── genservice/
│       │   │   │   ├── genservice.go
│       │   │   │   ├── genservice_ast_parse.go
│       │   │   │   ├── genservice_ast_utils.go
│       │   │   │   ├── genservice_calculate.go
│       │   │   │   ├── genservice_generate.go
│       │   │   │   └── genservice_generate_template.go
│       │   │   └── testdata/
│       │   │       ├── build/
│       │   │       │   ├── multiple/
│       │   │       │   │   └── multiple.go
│       │   │       │   ├── single/
│       │   │       │   │   └── main.go
│       │   │       │   └── varmap/
│       │   │       │       ├── go.mod
│       │   │       │       ├── go.sum
│       │   │       │       └── main.go
│       │   │       ├── fix/
│       │   │       │   └── fix25_content.go
│       │   │       ├── genctrl/
│       │   │       │   ├── default/
│       │   │       │   │   ├── api/
│       │   │       │   │   │   └── article/
│       │   │       │   │   │       ├── article_expect.go
│       │   │       │   │   │       ├── v1/
│       │   │       │   │   │       │   ├── edit.go
│       │   │       │   │   │       │   └── get.go
│       │   │       │   │   │       └── v2/
│       │   │       │   │   │           └── edit.go
│       │   │       │   │   └── controller/
│       │   │       │   │       └── article/
│       │   │       │   │           ├── article.go
│       │   │       │   │           ├── article_new.go
│       │   │       │   │           ├── article_v1_create.go
│       │   │       │   │           ├── article_v1_get_list.go
│       │   │       │   │           ├── article_v1_get_one.go
│       │   │       │   │           ├── article_v1_update.go
│       │   │       │   │           ├── article_v2_create.go
│       │   │       │   │           └── article_v2_update.go
│       │   │       │   ├── merge/
│       │   │       │   │   ├── add_new_ctrl/
│       │   │       │   │   │   ├── api/
│       │   │       │   │   │   │   └── dict/
│       │   │       │   │   │   │       ├── dict_add_new_ctrl_expect.gotest
│       │   │       │   │   │   │       ├── dict_expect.go
│       │   │       │   │   │   │       └── v1/
│       │   │       │   │   │   │           └── dict_type.go
│       │   │       │   │   │   └── controller/
│       │   │       │   │   │       └── dict/
│       │   │       │   │   │           ├── dict.go
│       │   │       │   │   │           ├── dict_new.go
│       │   │       │   │   │           ├── dict_v1_dict_type.go
│       │   │       │   │   │           └── dict_v1_test_new.gotest
│       │   │       │   │   └── add_new_file/
│       │   │       │   │       ├── api/
│       │   │       │   │       │   └── dict/
│       │   │       │   │       │       ├── dict_add_new_ctrl_expect.gotest
│       │   │       │   │       │       ├── dict_expect.go
│       │   │       │   │       │       └── v1/
│       │   │       │   │       │           └── dict_type.go
│       │   │       │   │       └── controller/
│       │   │       │   │           └── dict/
│       │   │       │   │               ├── dict.go
│       │   │       │   │               ├── dict_new.go
│       │   │       │   │               ├── dict_v1_dict_type.go
│       │   │       │   │               └── dict_v1_test_new.gotest
│       │   │       │   └── multi/
│       │   │       │       ├── api/
│       │   │       │       │   ├── admin/
│       │   │       │       │   │   ├── article/
│       │   │       │       │   │   │   ├── article_expect.go
│       │   │       │       │   │   │   └── v1/
│       │   │       │       │   │   │       └── edit.go
│       │   │       │       │   │   └── user/
│       │   │       │       │   │       ├── user_expect.go
│       │   │       │       │   │       └── v1/
│       │   │       │       │   │           └── edit.go
│       │   │       │       │   └── app/
│       │   │       │       │       └── user/
│       │   │       │       │           ├── user_expect.go
│       │   │       │       │           ├── user_ext/
│       │   │       │       │           │   ├── user_ext_expect.go
│       │   │       │       │           │   └── v1/
│       │   │       │       │           │       └── edit.go
│       │   │       │       │           └── v1/
│       │   │       │       │               └── edit.go
│       │   │       │       └── controller/
│       │   │       │           ├── admin/
│       │   │       │           │   ├── article/
│       │   │       │           │   │   ├── article.go
│       │   │       │           │   │   ├── article_new.go
│       │   │       │           │   │   └── article_v1_create.go
│       │   │       │           │   └── user/
│       │   │       │           │       ├── user.go
│       │   │       │           │       ├── user_new.go
│       │   │       │           │       └── user_v1_create.go
│       │   │       │           └── app/
│       │   │       │               └── user/
│       │   │       │                   ├── user.go
│       │   │       │                   ├── user_ext/
│       │   │       │                   │   ├── user_ext.go
│       │   │       │                   │   ├── user_ext_new.go
│       │   │       │                   │   ├── user_ext_v1_create.go
│       │   │       │                   │   └── user_ext_v1_update.go
│       │   │       │                   ├── user_new.go
│       │   │       │                   ├── user_v1_create.go
│       │   │       │                   └── user_v1_update.go
│       │   │       ├── gendao/
│       │   │       │   ├── generated_user/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── generated_user_field_mapping/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── generated_user_sqlite3/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── generated_user_type_mapping/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── go.mod.txt
│       │   │       │   ├── sharding/
│       │   │       │   │   ├── sharding.sql
│       │   │       │   │   └── sharding_overlapping.sql
│       │   │       │   ├── sqlite3/
│       │   │       │   │   └── user.sqlite3.sql
│       │   │       │   ├── tables_pattern.sql
│       │   │       │   └── user.tpl.sql
│       │   │       ├── genpb/
│       │   │       │   ├── multiple_tags.proto
│       │   │       │   └── nested_message.proto
│       │   │       ├── genpbentity/
│       │   │       │   ├── generated/
│       │   │       │   │   ├── table_user.proto
│       │   │       │   │   └── table_user_snake_screaming.proto
│       │   │       │   └── user.tpl.sql
│       │   │       ├── genservice/
│       │   │       │   ├── logic/
│       │   │       │   │   ├── article/
│       │   │       │   │   │   ├── article.go
│       │   │       │   │   │   └── article_extra.go
│       │   │       │   │   ├── base/
│       │   │       │   │   │   ├── base.go
│       │   │       │   │   │   ├── base_destory.go
│       │   │       │   │   │   └── sub/
│       │   │       │   │   │       └── sub.go
│       │   │       │   │   ├── delivery/
│       │   │       │   │   │   ├── delivery_app.go
│       │   │       │   │   │   └── delivery_cluster.go
│       │   │       │   │   ├── logic_expect.go
│       │   │       │   │   └── user/
│       │   │       │   │       ├── supper_vip_user.go
│       │   │       │   │       ├── user.go
│       │   │       │   │       └── vip_user.go
│       │   │       │   └── service/
│       │   │       │       ├── article.go
│       │   │       │       ├── base.go
│       │   │       │       ├── delivery.go
│       │   │       │       └── user.go
│       │   │       └── issue/
│       │   │           ├── 2572/
│       │   │           │   ├── config.yaml
│       │   │           │   ├── dao/
│       │   │           │   │   ├── internal/
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   ├── user_3.go
│       │   │           │   │   └── user_4.go
│       │   │           │   ├── model/
│       │   │           │   │   ├── do/
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   └── entity/
│       │   │           │   │       ├── user_3.go
│       │   │           │   │       └── user_4.go
│       │   │           │   ├── sql1.sql
│       │   │           │   └── sql2.sql
│       │   │           ├── 2616/
│       │   │           │   ├── config.yaml
│       │   │           │   ├── dao/
│       │   │           │   │   ├── internal/
│       │   │           │   │   │   ├── user_1.go
│       │   │           │   │   │   ├── user_2.go
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   ├── user_1.go
│       │   │           │   │   ├── user_2.go
│       │   │           │   │   ├── user_3.go
│       │   │           │   │   └── user_4.go
│       │   │           │   ├── model/
│       │   │           │   │   ├── do/
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   └── entity/
│       │   │           │   │       ├── user_3.go
│       │   │           │   │       └── user_4.go
│       │   │           │   ├── sql1.sql
│       │   │           │   └── sql2.sql
│       │   │           ├── 2746/
│       │   │           │   ├── issue_2746.go
│       │   │           │   └── sql.sql
│       │   │           ├── 3328/
│       │   │           │   └── logic/
│       │   │           │       └── .gitkeep
│       │   │           ├── 3459/
│       │   │           │   └── config.yaml
│       │   │           ├── 3460/
│       │   │           │   ├── api/
│       │   │           │   │   └── hello/
│       │   │           │   │       ├── hello.go
│       │   │           │   │       ├── v1/
│       │   │           │   │       │   └── req.go
│       │   │           │   │       └── v2/
│       │   │           │   │           └── req.go
│       │   │           │   └── controller/
│       │   │           │       └── hello/
│       │   │           │           ├── hello.go
│       │   │           │           ├── hello_new.go
│       │   │           │           ├── hello_v1_req.go
│       │   │           │           └── hello_v2_req.go
│       │   │           ├── 3545/
│       │   │           │   └── table_user.proto
│       │   │           ├── 3685/
│       │   │           │   ├── table_user.proto
│       │   │           │   └── user.tpl.sql
│       │   │           ├── 3749/
│       │   │           │   ├── dao/
│       │   │           │   │   ├── internal/
│       │   │           │   │   │   └── table_user.go
│       │   │           │   │   └── table_user.go
│       │   │           │   ├── model/
│       │   │           │   │   ├── do/
│       │   │           │   │   │   └── table_user.go
│       │   │           │   │   └── entity/
│       │   │           │   │       └── table_user.go
│       │   │           │   └── user.tpl.sql
│       │   │           ├── 3835/
│       │   │           │   ├── logic/
│       │   │           │   │   ├── issue3835/
│       │   │           │   │   │   └── issue3835.go
│       │   │           │   │   └── logic.go
│       │   │           │   └── service/
│       │   │           │       └── issue_3835.go
│       │   │           ├── 3882/
│       │   │           │   └── issue3882.proto
│       │   │           ├── 3953/
│       │   │           │   └── issue3953.proto
│       │   │           ├── 4242/
│       │   │           │   ├── logic/
│       │   │           │   │   ├── issue4242/
│       │   │           │   │   │   └── issue4242.go
│       │   │           │   │   ├── issue4242alias/
│       │   │           │   │   │   └── issue4242alias.go
│       │   │           │   │   └── logic.go
│       │   │           │   └── service/
│       │   │           │       ├── issue_4242.go
│       │   │           │       └── issue_4242_alias.go
│       │   │           ├── 4330/
│       │   │           │   ├── issue4330_double.proto
│       │   │           │   └── issue4330_string.proto
│       │   │           └── 4387/
│       │   │               ├── api/
│       │   │               │   └── types.go
│       │   │               ├── go.mod
│       │   │               └── go.sum
│       │   ├── consts/
│       │   │   ├── consts.go
│       │   │   ├── consts_gen_ctrl_template.go
│       │   │   ├── consts_gen_ctrl_template_sdk.go
│       │   │   ├── consts_gen_dao_template_dao.go
│       │   │   ├── consts_gen_dao_template_do.go
│       │   │   ├── consts_gen_dao_template_entity.go
│       │   │   ├── consts_gen_dao_template_table.go
│       │   │   ├── consts_gen_enums_template.go
│       │   │   ├── consts_gen_pbentity_template.go
│       │   │   ├── consts_gen_service_template.go
│       │   │   └── consts_gen_service_template_logic.go
│       │   ├── packed/
│       │   │   ├── packed.go
│       │   │   ├── template-mono-app.go
│       │   │   ├── template-mono.go
│       │   │   └── template-single.go
│       │   ├── service/
│       │   │   └── install.go
│       │   └── utility/
│       │       ├── allyes/
│       │       │   └── allyes.go
│       │       ├── mlog/
│       │       │   └── mlog.go
│       │       └── utils/
│       │           ├── utils.go
│       │           ├── utils_http_download.go
│       │           └── utils_test.go
│       ├── main.go
│       └── test/
│           └── testdata/
│               ├── tpls/
│               │   ├── tpl1.yaml
│               │   └── tpl2.sql
│               └── values.json
├── container/
│   ├── garray/
│   │   ├── garray.go
│   │   ├── garray_func.go
│   │   ├── garray_normal_any.go
│   │   ├── garray_normal_int.go
│   │   ├── garray_normal_str.go
│   │   ├── garray_normal_t.go
│   │   ├── garray_sorted_any.go
│   │   ├── garray_sorted_int.go
│   │   ├── garray_sorted_str.go
│   │   ├── garray_sorted_t.go
│   │   ├── garray_z_bench_any_test.go
│   │   ├── garray_z_example_normal_any_test.go
│   │   ├── garray_z_example_normal_int_test.go
│   │   ├── garray_z_example_normal_str_test.go
│   │   ├── garray_z_example_normal_t_test.go
│   │   ├── garray_z_example_sorted_str_test.go
│   │   ├── garray_z_example_sorted_t_test.go
│   │   ├── garray_z_unit_all_basic_test.go
│   │   ├── garray_z_unit_normal_any_test.go
│   │   ├── garray_z_unit_normal_int_test.go
│   │   ├── garray_z_unit_normal_str_test.go
│   │   ├── garray_z_unit_normal_t_test.go
│   │   ├── garray_z_unit_sorted_any_test.go
│   │   ├── garray_z_unit_sorted_int_test.go
│   │   ├── garray_z_unit_sorted_str_test.go
│   │   └── garray_z_unit_sorted_t_test.go
│   ├── glist/
│   │   ├── glist.go
│   │   ├── glist_t.go
│   │   ├── glist_z_bench_t_test.go
│   │   ├── glist_z_bench_test.go
│   │   ├── glist_z_example_t_test.go
│   │   ├── glist_z_example_test.go
│   │   ├── glist_z_unit_t_test.go
│   │   └── glist_z_unit_test.go
│   ├── gmap/
│   │   ├── gmap.go
│   │   ├── gmap_hash_any_any_map.go
│   │   ├── gmap_hash_int_any_map.go
│   │   ├── gmap_hash_int_int_map.go
│   │   ├── gmap_hash_int_str_map.go
│   │   ├── gmap_hash_k_v_map.go
│   │   ├── gmap_hash_str_any_map.go
│   │   ├── gmap_hash_str_int_map.go
│   │   ├── gmap_hash_str_str_map.go
│   │   ├── gmap_list_k_v_map.go
│   │   ├── gmap_list_map.go
│   │   ├── gmap_tree_k_v_map.go
│   │   ├── gmap_tree_map.go
│   │   ├── gmap_z_basic_test.go
│   │   ├── gmap_z_bench_maps_test.go
│   │   ├── gmap_z_bench_safe_test.go
│   │   ├── gmap_z_bench_syncmap_test.go
│   │   ├── gmap_z_bench_unsafe_test.go
│   │   ├── gmap_z_example_any_any_test.go
│   │   ├── gmap_z_example_int_any_test.go
│   │   ├── gmap_z_example_int_int_test.go
│   │   ├── gmap_z_example_list_test.go
│   │   ├── gmap_z_example_str_any_test.go
│   │   ├── gmap_z_example_str_int_test.go
│   │   ├── gmap_z_example_str_str_test.go
│   │   ├── gmap_z_example_test.go
│   │   ├── gmap_z_unit_hash_any_any_test.go
│   │   ├── gmap_z_unit_hash_int_any_test.go
│   │   ├── gmap_z_unit_hash_int_int_test.go
│   │   ├── gmap_z_unit_hash_int_str_test.go
│   │   ├── gmap_z_unit_hash_str_any_test.go
│   │   ├── gmap_z_unit_hash_str_int_test.go
│   │   ├── gmap_z_unit_hash_str_str_test.go
│   │   ├── gmap_z_unit_k_v_map_test.go
│   │   ├── gmap_z_unit_list_k_v_map_race_test.go
│   │   ├── gmap_z_unit_list_k_v_map_test.go
│   │   ├── gmap_z_unit_list_map_test.go
│   │   └── gmap_z_unit_tree_map_test.go
│   ├── gpool/
│   │   ├── gpool.go
│   │   ├── gpool_bench_test.go
│   │   ├── gpool_t.go
│   │   ├── gpool_z_example_test.go
│   │   ├── gpool_z_unit_generic_test.go
│   │   └── gpool_z_unit_test.go
│   ├── gqueue/
│   │   ├── gqueue.go
│   │   ├── gqueue_t.go
│   │   ├── gqueue_z_bench_test.go
│   │   ├── gqueue_z_example_test.go
│   │   └── gqueue_z_unit_test.go
│   ├── gring/
│   │   ├── gring.go
│   │   ├── gring_t.go
│   │   ├── gring_z_bench_test.go
│   │   ├── gring_z_example_test.go
│   │   └── gring_z_unit_test.go
│   ├── gset/
│   │   ├── gset_any_set.go
│   │   ├── gset_int_set.go
│   │   ├── gset_str_set.go
│   │   ├── gset_t_set.go
│   │   ├── gset_z_bench_test.go
│   │   ├── gset_z_example_any_test.go
│   │   ├── gset_z_example_int_test.go
│   │   ├── gset_z_example_str_test.go
│   │   ├── gset_z_unit_any_test.go
│   │   ├── gset_z_unit_int_test.go
│   │   ├── gset_z_unit_str_test.go
│   │   └── gset_z_unit_t_set_test.go
│   ├── gtree/
│   │   ├── gtree.go
│   │   ├── gtree_avltree.go
│   │   ├── gtree_btree.go
│   │   ├── gtree_k_v_avltree.go
│   │   ├── gtree_k_v_btree.go
│   │   ├── gtree_k_v_redblacktree.go
│   │   ├── gtree_redblacktree.go
│   │   ├── gtree_z_avl_tree_test.go
│   │   ├── gtree_z_b_tree_test.go
│   │   ├── gtree_z_example_avltree_test.go
│   │   ├── gtree_z_example_btree_test.go
│   │   ├── gtree_z_example_redblacktree_test.go
│   │   ├── gtree_z_example_test.go
│   │   ├── gtree_z_k_v_tree_test.go
│   │   └── gtree_z_redblack_tree_test.go
│   ├── gtype/
│   │   ├── gtype.go
│   │   ├── gtype_any.go
│   │   ├── gtype_bool.go
│   │   ├── gtype_byte.go
│   │   ├── gtype_bytes.go
│   │   ├── gtype_float32.go
│   │   ├── gtype_float64.go
│   │   ├── gtype_int.go
│   │   ├── gtype_int32.go
│   │   ├── gtype_int64.go
│   │   ├── gtype_interface.go
│   │   ├── gtype_string.go
│   │   ├── gtype_uint.go
│   │   ├── gtype_uint32.go
│   │   ├── gtype_uint64.go
│   │   ├── gtype_z_bench_basic_test.go
│   │   ├── gtype_z_bench_json_test.go
│   │   ├── gtype_z_unit_any_test.go
│   │   ├── gtype_z_unit_bool_test.go
│   │   ├── gtype_z_unit_byte_test.go
│   │   ├── gtype_z_unit_bytes_test.go
│   │   ├── gtype_z_unit_float32_test.go
│   │   ├── gtype_z_unit_float64_test.go
│   │   ├── gtype_z_unit_int32_test.go
│   │   ├── gtype_z_unit_int64_test.go
│   │   ├── gtype_z_unit_int_test.go
│   │   ├── gtype_z_unit_interface_test.go
│   │   ├── gtype_z_unit_string_test.go
│   │   ├── gtype_z_unit_uint32_test.go
│   │   ├── gtype_z_unit_uint64_test.go
│   │   └── gtype_z_unit_uint_test.go
│   └── gvar/
│       ├── gvar.go
│       ├── gvar_basic.go
│       ├── gvar_copy.go
│       ├── gvar_is.go
│       ├── gvar_list.go
│       ├── gvar_map.go
│       ├── gvar_scan.go
│       ├── gvar_set.go
│       ├── gvar_slice.go
│       ├── gvar_struct.go
│       ├── gvar_time.go
│       ├── gvar_vars.go
│       ├── gvar_z_bench_ptr_test.go
│       ├── gvar_z_example_test.go
│       ├── gvar_z_unit_basic_test.go
│       ├── gvar_z_unit_is_test.go
│       ├── gvar_z_unit_json_test.go
│       ├── gvar_z_unit_list_test.go
│       ├── gvar_z_unit_map_test.go
│       ├── gvar_z_unit_slice_test.go
│       ├── gvar_z_unit_struct_test.go
│       └── gvar_z_unit_vars_test.go
├── contrib/
│   ├── config/
│   │   ├── README.MD
│   │   ├── apollo/
│   │   │   ├── README.MD
│   │   │   ├── apollo.go
│   │   │   ├── apollo_adapter_ctx.go
│   │   │   ├── apollo_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── consul/
│   │   │   ├── README.md
│   │   │   ├── consul.go
│   │   │   ├── consul_adapter_ctx.go
│   │   │   ├── consul_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── kubecm/
│   │   │   ├── README.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── kubecm.go
│   │   │   ├── kubecm_adapter_ctx.go
│   │   │   ├── kubecm_kube.go
│   │   │   ├── kubecm_test.go
│   │   │   └── testdata/
│   │   │       └── configmap.yaml
│   │   ├── nacos/
│   │   │   ├── README.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── nacos.go
│   │   │   ├── nacos_adapter_ctx.go
│   │   │   └── nacos_test.go
│   │   └── polaris/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── polaris.go
│   │       └── polaris_adapter_ctx.go
│   ├── drivers/
│   │   ├── README.MD
│   │   ├── clickhouse/
│   │   │   ├── clickhouse.go
│   │   │   ├── clickhouse_convert.go
│   │   │   ├── clickhouse_do_commit.go
│   │   │   ├── clickhouse_do_delete.go
│   │   │   ├── clickhouse_do_filter.go
│   │   │   ├── clickhouse_do_insert.go
│   │   │   ├── clickhouse_do_update.go
│   │   │   ├── clickhouse_insert.go
│   │   │   ├── clickhouse_open.go
│   │   │   ├── clickhouse_ping.go
│   │   │   ├── clickhouse_table_fields.go
│   │   │   ├── clickhouse_tables.go
│   │   │   ├── clickhouse_transaction.go
│   │   │   ├── clickhouse_z_unit_db_test.go
│   │   │   ├── clickhouse_z_unit_init_test.go
│   │   │   ├── clickhouse_z_unit_issue_test.go
│   │   │   ├── clickhouse_z_unit_model_test.go
│   │   │   ├── clickhouse_z_unit_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── dm/
│   │   │   ├── dm.go
│   │   │   ├── dm_convert.go
│   │   │   ├── dm_do_filter.go
│   │   │   ├── dm_do_insert.go
│   │   │   ├── dm_do_query.go
│   │   │   ├── dm_open.go
│   │   │   ├── dm_table_fields.go
│   │   │   ├── dm_tables.go
│   │   │   ├── dm_z_unit_basic_test.go
│   │   │   ├── dm_z_unit_feature_soft_time_test.go
│   │   │   ├── dm_z_unit_init_test.go
│   │   │   ├── dm_z_unit_issue_test.go
│   │   │   ├── dm_z_unit_model_test.go
│   │   │   ├── dm_z_unit_pr_test.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── testdata/
│   │   │       └── issue/
│   │   │           └── 2594/
│   │   │               └── sql.sql
│   │   ├── gaussdb/
│   │   │   ├── gaussdb.go
│   │   │   ├── gaussdb_convert.go
│   │   │   ├── gaussdb_do_exec.go
│   │   │   ├── gaussdb_do_filter.go
│   │   │   ├── gaussdb_do_insert.go
│   │   │   ├── gaussdb_open.go
│   │   │   ├── gaussdb_order.go
│   │   │   ├── gaussdb_result.go
│   │   │   ├── gaussdb_table_fields.go
│   │   │   ├── gaussdb_tables.go
│   │   │   ├── gaussdb_z_unit_db_test.go
│   │   │   ├── gaussdb_z_unit_feature_ctx_test.go
│   │   │   ├── gaussdb_z_unit_feature_hook_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_builder_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_do_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_join_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_struct_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_subquery_test.go
│   │   │   ├── gaussdb_z_unit_feature_scanlist_test.go
│   │   │   ├── gaussdb_z_unit_feature_soft_time_test.go
│   │   │   ├── gaussdb_z_unit_feature_union_test.go
│   │   │   ├── gaussdb_z_unit_feature_with_test.go
│   │   │   ├── gaussdb_z_unit_field_test.go
│   │   │   ├── gaussdb_z_unit_filter_test.go
│   │   │   ├── gaussdb_z_unit_init_test.go
│   │   │   ├── gaussdb_z_unit_model_test.go
│   │   │   ├── gaussdb_z_unit_model_where_test.go
│   │   │   ├── gaussdb_z_unit_open_test.go
│   │   │   ├── gaussdb_z_unit_raw_test.go
│   │   │   ├── gaussdb_z_unit_test.go
│   │   │   ├── gaussdb_z_unit_transaction_test.go
│   │   │   ├── gaussdb_z_unit_upsert_test.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── testdata/
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── mariadb/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── mariadb.go
│   │   │   ├── mariadb_table_fields.go
│   │   │   ├── mariadb_unit_init_test.go
│   │   │   ├── mariadb_unit_model_test.go
│   │   │   ├── mariadb_z_unit_feature_batch_test.go
│   │   │   ├── mariadb_z_unit_feature_cache_test.go
│   │   │   ├── mariadb_z_unit_feature_concurrent_test.go
│   │   │   ├── mariadb_z_unit_feature_ctx_test.go
│   │   │   ├── mariadb_z_unit_feature_error_handling_test.go
│   │   │   ├── mariadb_z_unit_feature_hook_test.go
│   │   │   ├── mariadb_z_unit_feature_model_builder_test.go
│   │   │   ├── mariadb_z_unit_feature_model_do_test.go
│   │   │   ├── mariadb_z_unit_feature_model_join_test.go
│   │   │   ├── mariadb_z_unit_feature_model_sharding_test.go
│   │   │   ├── mariadb_z_unit_feature_model_struct_test.go
│   │   │   ├── mariadb_z_unit_feature_model_subquery_test.go
│   │   │   ├── mariadb_z_unit_feature_omit_test.go
│   │   │   ├── mariadb_z_unit_feature_pagination_test.go
│   │   │   ├── mariadb_z_unit_feature_raw_type_test.go
│   │   │   ├── mariadb_z_unit_feature_scanlist_test.go
│   │   │   ├── mariadb_z_unit_feature_soft_time_test.go
│   │   │   ├── mariadb_z_unit_feature_union_test.go
│   │   │   ├── mariadb_z_unit_feature_with_test.go
│   │   │   ├── mariadb_z_unit_model_where_test.go
│   │   │   ├── mariadb_z_unit_transaction_test.go
│   │   │   └── testdata/
│   │   │       ├── fix_gdb_join.sql
│   │   │       ├── fix_gdb_join_expect.sql
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── mssql/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── mssql.go
│   │   │   ├── mssql_do_commit.go
│   │   │   ├── mssql_do_exec.go
│   │   │   ├── mssql_do_filter.go
│   │   │   ├── mssql_do_filter_test.go
│   │   │   ├── mssql_do_insert.go
│   │   │   ├── mssql_open.go
│   │   │   ├── mssql_result.go
│   │   │   ├── mssql_table_fields.go
│   │   │   ├── mssql_tables.go
│   │   │   ├── mssql_z_unit_basic_test.go
│   │   │   ├── mssql_z_unit_init_test.go
│   │   │   ├── mssql_z_unit_model_test.go
│   │   │   └── mssql_z_unit_transaction_test.go
│   │   ├── mysql/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── mysql.go
│   │   │   ├── mysql_do_filter.go
│   │   │   ├── mysql_open.go
│   │   │   ├── mysql_table_fields.go
│   │   │   ├── mysql_tables.go
│   │   │   ├── mysql_z_unit_basic_test.go
│   │   │   ├── mysql_z_unit_core_bench_test.go
│   │   │   ├── mysql_z_unit_core_test.go
│   │   │   ├── mysql_z_unit_feature_batch_test.go
│   │   │   ├── mysql_z_unit_feature_cache_test.go
│   │   │   ├── mysql_z_unit_feature_concurrent_test.go
│   │   │   ├── mysql_z_unit_feature_ctx_test.go
│   │   │   ├── mysql_z_unit_feature_duplicate_test.go
│   │   │   ├── mysql_z_unit_feature_error_handling_test.go
│   │   │   ├── mysql_z_unit_feature_hook_test.go
│   │   │   ├── mysql_z_unit_feature_json_test.go
│   │   │   ├── mysql_z_unit_feature_lock_test.go
│   │   │   ├── mysql_z_unit_feature_master_slave_test.go
│   │   │   ├── mysql_z_unit_feature_metadata_test.go
│   │   │   ├── mysql_z_unit_feature_model_builder_test.go
│   │   │   ├── mysql_z_unit_feature_model_do_test.go
│   │   │   ├── mysql_z_unit_feature_model_join_test.go
│   │   │   ├── mysql_z_unit_feature_model_sharding_test.go
│   │   │   ├── mysql_z_unit_feature_model_struct_test.go
│   │   │   ├── mysql_z_unit_feature_model_subquery_test.go
│   │   │   ├── mysql_z_unit_feature_omit_test.go
│   │   │   ├── mysql_z_unit_feature_pagination_test.go
│   │   │   ├── mysql_z_unit_feature_partition_test.go
│   │   │   ├── mysql_z_unit_feature_raw_type_test.go
│   │   │   ├── mysql_z_unit_feature_scanlist_test.go
│   │   │   ├── mysql_z_unit_feature_soft_time_test.go
│   │   │   ├── mysql_z_unit_feature_union_test.go
│   │   │   ├── mysql_z_unit_feature_with_test.go
│   │   │   ├── mysql_z_unit_init_test.go
│   │   │   ├── mysql_z_unit_internal_test.go
│   │   │   ├── mysql_z_unit_issue_test.go
│   │   │   ├── mysql_z_unit_model_test.go
│   │   │   ├── mysql_z_unit_model_where_test.go
│   │   │   ├── mysql_z_unit_transaction_test.go
│   │   │   └── testdata/
│   │   │       ├── date_time_example.sql
│   │   │       ├── fix_gdb_join.sql
│   │   │       ├── fix_gdb_join_expect.sql
│   │   │       ├── fix_gdb_order_by.sql
│   │   │       ├── issues/
│   │   │       │   ├── 1380.sql
│   │   │       │   ├── 1401.sql
│   │   │       │   ├── 1412.sql
│   │   │       │   ├── 2105.sql
│   │   │       │   ├── 2119.sql
│   │   │       │   ├── 2439.sql
│   │   │       │   ├── 2643.sql
│   │   │       │   ├── 3086.sql
│   │   │       │   ├── 3218.sql
│   │   │       │   ├── 3626.sql
│   │   │       │   ├── 3754.sql
│   │   │       │   ├── 3915.sql
│   │   │       │   ├── 4034.sql
│   │   │       │   └── 4086.sql
│   │   │       ├── reservedwords_table_tpl.sql
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── oceanbase/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── oceanbase.go
│   │   ├── oracle/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── oracle.go
│   │   │   ├── oracle_do_commit.go
│   │   │   ├── oracle_do_exec.go
│   │   │   ├── oracle_do_filter.go
│   │   │   ├── oracle_do_insert.go
│   │   │   ├── oracle_open.go
│   │   │   ├── oracle_order.go
│   │   │   ├── oracle_result.go
│   │   │   ├── oracle_table_fields.go
│   │   │   ├── oracle_tables.go
│   │   │   ├── oracle_z_unit_basic_test.go
│   │   │   ├── oracle_z_unit_init_test.go
│   │   │   └── oracle_z_unit_model_test.go
│   │   ├── pgsql/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── pgsql.go
│   │   │   ├── pgsql_convert.go
│   │   │   ├── pgsql_do_exec.go
│   │   │   ├── pgsql_do_filter.go
│   │   │   ├── pgsql_do_insert.go
│   │   │   ├── pgsql_format_upsert.go
│   │   │   ├── pgsql_open.go
│   │   │   ├── pgsql_order.go
│   │   │   ├── pgsql_result.go
│   │   │   ├── pgsql_table_fields.go
│   │   │   ├── pgsql_tables.go
│   │   │   ├── pgsql_z_unit_convert_test.go
│   │   │   ├── pgsql_z_unit_db_test.go
│   │   │   ├── pgsql_z_unit_feature_ctx_test.go
│   │   │   ├── pgsql_z_unit_feature_hook_test.go
│   │   │   ├── pgsql_z_unit_feature_model_builder_test.go
│   │   │   ├── pgsql_z_unit_feature_model_do_test.go
│   │   │   ├── pgsql_z_unit_feature_model_join_test.go
│   │   │   ├── pgsql_z_unit_feature_model_struct_test.go
│   │   │   ├── pgsql_z_unit_feature_model_subquery_test.go
│   │   │   ├── pgsql_z_unit_feature_scanlist_test.go
│   │   │   ├── pgsql_z_unit_feature_soft_time_test.go
│   │   │   ├── pgsql_z_unit_feature_union_test.go
│   │   │   ├── pgsql_z_unit_feature_with_test.go
│   │   │   ├── pgsql_z_unit_field_test.go
│   │   │   ├── pgsql_z_unit_filter_test.go
│   │   │   ├── pgsql_z_unit_init_test.go
│   │   │   ├── pgsql_z_unit_issue_test.go
│   │   │   ├── pgsql_z_unit_model_test.go
│   │   │   ├── pgsql_z_unit_model_where_test.go
│   │   │   ├── pgsql_z_unit_open_test.go
│   │   │   ├── pgsql_z_unit_raw_test.go
│   │   │   ├── pgsql_z_unit_test.go
│   │   │   ├── pgsql_z_unit_transaction_test.go
│   │   │   ├── pgsql_z_unit_upsert_test.go
│   │   │   └── testdata/
│   │   │       ├── issues/
│   │   │       │   ├── issue3632.sql
│   │   │       │   ├── issue3668.sql
│   │   │       │   ├── issue3671.sql
│   │   │       │   └── issue4033.sql
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── sqlite/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── sqlite.go
│   │   │   ├── sqlite_do_filter.go
│   │   │   ├── sqlite_format_upsert.go
│   │   │   ├── sqlite_open.go
│   │   │   ├── sqlite_order.go
│   │   │   ├── sqlite_table_fields.go
│   │   │   ├── sqlite_tables.go
│   │   │   ├── sqlite_z_unit_core_test.go
│   │   │   ├── sqlite_z_unit_init_test.go
│   │   │   └── sqlite_z_unit_model_test.go
│   │   ├── sqlitecgo/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── sqlitecgo.go
│   │   │   ├── sqlitecgo_do_filter.go
│   │   │   ├── sqlitecgo_format_upsert.go
│   │   │   ├── sqlitecgo_open.go
│   │   │   ├── sqlitecgo_table_fields.go
│   │   │   ├── sqlitecgo_tables.go
│   │   │   ├── sqlitecgo_z_unit_core_test.go
│   │   │   ├── sqlitecgo_z_unit_init_test.go
│   │   │   └── sqlitecgo_z_unit_model_test.go
│   │   └── tidb/
│   │       ├── go.mod
│   │       ├── go.sum
│   │       └── tidb.go
│   ├── metric/
│   │   └── otelmetric/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── otelmetric.go
│   │       ├── otelmetric_callback.go
│   │       ├── otelmetric_meter_counter_performer.go
│   │       ├── otelmetric_meter_histogram_performer.go
│   │       ├── otelmetric_meter_observable_counter_performer.go
│   │       ├── otelmetric_meter_observable_gauge_performer.go
│   │       ├── otelmetric_meter_observable_updown_counter_performer.go
│   │       ├── otelmetric_meter_performer.go
│   │       ├── otelmetric_meter_updown_counter_performer.go
│   │       ├── otelmetric_metric_callback.go
│   │       ├── otelmetric_option.go
│   │       ├── otelmetric_prometheus.go
│   │       ├── otelmetric_provider.go
│   │       ├── otelmetric_util.go
│   │       ├── otelmetric_z_unit_http_test.go
│   │       ├── otelmetric_z_unit_test.go
│   │       └── testdata/
│   │           └── http.prometheus.metrics.txt
│   ├── nosql/
│   │   └── redis/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── redis.go
│   │       ├── redis_conn.go
│   │       ├── redis_func.go
│   │       ├── redis_group_generic.go
│   │       ├── redis_group_hash.go
│   │       ├── redis_group_list.go
│   │       ├── redis_group_pubsub.go
│   │       ├── redis_group_script.go
│   │       ├── redis_group_set.go
│   │       ├── redis_group_sorted_set.go
│   │       ├── redis_group_string.go
│   │       ├── redis_operation.go
│   │       ├── redis_test.go
│   │       ├── redis_z_func_test.go
│   │       ├── redis_z_group_generic_test.go
│   │       ├── redis_z_group_hash_test.go
│   │       ├── redis_z_group_list_test.go
│   │       ├── redis_z_group_pubsub_test.go
│   │       ├── redis_z_group_script_test.go
│   │       ├── redis_z_group_set_test.go
│   │       ├── redis_z_group_sorted_set_test.go
│   │       ├── redis_z_group_string_test.go
│   │       ├── redis_z_unit_config_test.go
│   │       ├── redis_z_unit_conn_sentinel_test.go
│   │       ├── redis_z_unit_conn_test.go
│   │       ├── redis_z_unit_gcache_adapter_test.go
│   │       ├── redis_z_unit_gins_redis_test.go
│   │       ├── redis_z_unit_test.go
│   │       └── testdata/
│   │           └── redis/
│   │               └── config.toml
│   ├── registry/
│   │   ├── README.MD
│   │   ├── consul/
│   │   │   ├── README.MD
│   │   │   ├── consul.go
│   │   │   ├── consul_discovery.go
│   │   │   ├── consul_test.go
│   │   │   ├── consul_watcher.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── etcd/
│   │   │   ├── README.MD
│   │   │   ├── etcd.go
│   │   │   ├── etcd_discovery.go
│   │   │   ├── etcd_registrar.go
│   │   │   ├── etcd_service.go
│   │   │   ├── etcd_watcher.go
│   │   │   ├── etcd_z_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── file/
│   │   │   ├── README.MD
│   │   │   ├── file.go
│   │   │   ├── file_discovery.go
│   │   │   ├── file_registrar.go
│   │   │   ├── file_service.go
│   │   │   ├── file_watcher.go
│   │   │   ├── file_z_basic_test.go
│   │   │   ├── file_z_http_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── nacos/
│   │   │   ├── README.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── nacos.go
│   │   │   ├── nacos_discovery.go
│   │   │   ├── nacos_register.go
│   │   │   ├── nacos_service.go
│   │   │   ├── nacos_watcher.go
│   │   │   └── nacos_z_test.go
│   │   ├── polaris/
│   │   │   ├── README.MD
│   │   │   ├── README_ZH.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── polaris.go
│   │   │   ├── polaris_discovery.go
│   │   │   ├── polaris_registry.go
│   │   │   ├── polaris_service.go
│   │   │   ├── polaris_watcher.go
│   │   │   └── polaris_z_test.go
│   │   └── zookeeper/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── zookeeper.go
│   │       ├── zookeeper_discovery.go
│   │       ├── zookeeper_func.go
│   │       ├── zookeeper_registrar.go
│   │       ├── zookeeper_watcher.go
│   │       └── zookeeper_z_test.go
│   ├── rpc/
│   │   └── grpcx/
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── grpcx.go
│   │       ├── grpcx_grpc_client.go
│   │       ├── grpcx_grpc_server.go
│   │       ├── grpcx_grpc_server_config.go
│   │       ├── grpcx_grpc_server_unary.go
│   │       ├── grpcx_interceptor_client.go
│   │       ├── grpcx_interceptor_server.go
│   │       ├── grpcx_registry_file.go
│   │       ├── grpcx_unit_z_ctx_test.go
│   │       ├── grpcx_unit_z_grpc_server_basic_test.go
│   │       ├── grpcx_unit_z_grpc_server_config_test.go
│   │       ├── grpcx_unit_z_issue_test.go
│   │       ├── internal/
│   │       │   ├── balancer/
│   │       │   │   ├── balancer.go
│   │       │   │   ├── balancer_builder.go
│   │       │   │   ├── balancer_node.go
│   │       │   │   └── balancer_picker.go
│   │       │   ├── grpcctx/
│   │       │   │   └── grpcctx.go
│   │       │   ├── resolver/
│   │       │   │   ├── resolver.go
│   │       │   │   ├── resolver_builder.go
│   │       │   │   ├── resolver_manager.go
│   │       │   │   └── resolver_resolver.go
│   │       │   ├── tracing/
│   │       │   │   ├── tracing.go
│   │       │   │   ├── tracing_interceptor.go
│   │       │   │   ├── tracing_interceptor_client.go
│   │       │   │   └── tracing_interceptor_server.go
│   │       │   └── utils/
│   │       │       └── utils.go
│   │       └── testdata/
│   │           ├── configuration/
│   │           │   └── config.yaml
│   │           ├── controller/
│   │           │   └── helloworld.go
│   │           └── protobuf/
│   │               ├── helloworld.pb.go
│   │               ├── helloworld.proto
│   │               └── helloworld_grpc.pb.go
│   ├── sdk/
│   │   └── httpclient/
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── httpclient.go
│   │       ├── httpclient_config.go
│   │       ├── httpclient_handler.go
│   │       └── httpclient_z_unit_feature_handler_test.go
│   └── trace/
│       ├── otlpgrpc/
│       │   ├── go.mod
│       │   ├── go.sum
│       │   └── otlpgrpc.go
│       └── otlphttp/
│           ├── go.mod
│           ├── go.sum
│           └── otlphttp.go
├── crypto/
│   ├── gaes/
│   │   ├── gaes.go
│   │   └── gaes_z_unit_test.go
│   ├── gcrc32/
│   │   ├── gcrc32.go
│   │   └── gcrc32_z_unit_test.go
│   ├── gdes/
│   │   ├── gdes.go
│   │   └── gdes_z_unit_test.go
│   ├── gmd5/
│   │   ├── gmd5.go
│   │   └── gmd5_z_unit_test.go
│   ├── grsa/
│   │   ├── README.md
│   │   ├── grsa.go
│   │   └── grsa_z_unit_test.go
│   ├── gsha1/
│   │   ├── gsha1.go
│   │   └── gsha1_z_unit_test.go
│   ├── gsha256/
│   │   ├── gsha256.go
│   │   └── gsha256_z_unit_test.go
│   └── gsha512/
│       ├── gsha512.go
│       └── gsha512_z_unit_test.go
├── database/
│   ├── gdb/
│   │   ├── gdb.go
│   │   ├── gdb_converter.go
│   │   ├── gdb_core.go
│   │   ├── gdb_core_config.go
│   │   ├── gdb_core_ctx.go
│   │   ├── gdb_core_link.go
│   │   ├── gdb_core_stats.go
│   │   ├── gdb_core_structure.go
│   │   ├── gdb_core_trace.go
│   │   ├── gdb_core_transaction.go
│   │   ├── gdb_core_txcore.go
│   │   ├── gdb_core_underlying.go
│   │   ├── gdb_core_utility.go
│   │   ├── gdb_driver_default.go
│   │   ├── gdb_driver_wrapper.go
│   │   ├── gdb_driver_wrapper_db.go
│   │   ├── gdb_func.go
│   │   ├── gdb_model.go
│   │   ├── gdb_model_builder.go
│   │   ├── gdb_model_builder_where.go
│   │   ├── gdb_model_builder_where_prefix.go
│   │   ├── gdb_model_builder_whereor.go
│   │   ├── gdb_model_builder_whereor_prefix.go
│   │   ├── gdb_model_cache.go
│   │   ├── gdb_model_delete.go
│   │   ├── gdb_model_fields.go
│   │   ├── gdb_model_hook.go
│   │   ├── gdb_model_insert.go
│   │   ├── gdb_model_join.go
│   │   ├── gdb_model_lock.go
│   │   ├── gdb_model_option.go
│   │   ├── gdb_model_order_group.go
│   │   ├── gdb_model_select.go
│   │   ├── gdb_model_sharding.go
│   │   ├── gdb_model_soft_time.go
│   │   ├── gdb_model_transaction.go
│   │   ├── gdb_model_update.go
│   │   ├── gdb_model_utility.go
│   │   ├── gdb_model_where.go
│   │   ├── gdb_model_where_prefix.go
│   │   ├── gdb_model_whereor.go
│   │   ├── gdb_model_whereor_prefix.go
│   │   ├── gdb_model_with.go
│   │   ├── gdb_panic_recovery_test.go
│   │   ├── gdb_result.go
│   │   ├── gdb_schema.go
│   │   ├── gdb_statement.go
│   │   ├── gdb_type_record.go
│   │   ├── gdb_type_result.go
│   │   ├── gdb_type_result_scanlist.go
│   │   ├── gdb_z_core_config_external_test.go
│   │   ├── gdb_z_core_config_test.go
│   │   ├── gdb_z_example_test.go
│   │   ├── gdb_z_mysql_internal_test.go
│   │   ├── gdb_z_unit_issue_test.go
│   │   └── testdata/
│   │       ├── issue1380.sql
│   │       ├── issue1401.sql
│   │       ├── issue1412.sql
│   │       ├── reservedwords_table_tpl.sql
│   │       └── with_multiple_depends.sql
│   └── gredis/
│       ├── gredis.go
│       ├── gredis_adapter.go
│       ├── gredis_config.go
│       ├── gredis_instance.go
│       ├── gredis_redis.go
│       ├── gredis_redis_group_generic.go
│       ├── gredis_redis_group_hash.go
│       ├── gredis_redis_group_list.go
│       ├── gredis_redis_group_pubsub.go
│       ├── gredis_redis_group_script.go
│       ├── gredis_redis_group_set.go
│       ├── gredis_redis_group_sorted_set.go
│       └── gredis_redis_group_string.go
├── debug/
│   └── gdebug/
│       ├── gdebug.go
│       ├── gdebug_caller.go
│       ├── gdebug_grid.go
│       ├── gdebug_stack.go
│       ├── gdebug_version.go
│       ├── gdebug_z_bench_test.go
│       ├── gdebug_z_unit_internal_test.go
│       └── gdebug_z_unit_test.go
├── encoding/
│   ├── gbase64/
│   │   ├── gbase64.go
│   │   ├── gbase64_z_unit_test.go
│   │   └── testdata/
│   │       └── test
│   ├── gbinary/
│   │   ├── gbinary.go
│   │   ├── gbinary_be.go
│   │   ├── gbinary_bit.go
│   │   ├── gbinary_func.go
│   │   ├── gbinary_le.go
│   │   ├── gbinary_z_unit_be_test.go
│   │   ├── gbinary_z_unit_le_test.go
│   │   └── gbinary_z_unit_test.go
│   ├── gcharset/
│   │   ├── gcharset.go
│   │   └── gcharset_z_unit_test.go
│   ├── gcompress/
│   │   ├── gcompress.go
│   │   ├── gcompress_gzip.go
│   │   ├── gcompress_z_unit_gzip_test.go
│   │   ├── gcompress_z_unit_zip_test.go
│   │   ├── gcompress_z_unit_zlib_test.go
│   │   ├── gcompress_zip.go
│   │   ├── gcompress_zlib.go
│   │   └── testdata/
│   │       ├── gzip/
│   │       │   └── file.txt
│   │       └── zip/
│   │           ├── path1/
│   │           │   └── 1.txt
│   │           └── path2/
│   │               └── 2.txt
│   ├── ghash/
│   │   ├── ghash.go
│   │   ├── ghash_ap.go
│   │   ├── ghash_bkdr.go
│   │   ├── ghash_djb.go
│   │   ├── ghash_elf.go
│   │   ├── ghash_jshash.go
│   │   ├── ghash_pjw.go
│   │   ├── ghash_rs.go
│   │   ├── ghash_sdbm.go
│   │   ├── ghash_z_bench_test.go
│   │   └── ghash_z_unit_test.go
│   ├── ghtml/
│   │   ├── ghtml.go
│   │   └── ghtml_z_unit_test.go
│   ├── gini/
│   │   ├── gini.go
│   │   └── gini_z_unit_test.go
│   ├── gjson/
│   │   ├── gjson.go
│   │   ├── gjson_api.go
│   │   ├── gjson_api_config.go
│   │   ├── gjson_api_encoding.go
│   │   ├── gjson_api_new_load.go
│   │   ├── gjson_api_new_load_content.go
│   │   ├── gjson_api_new_load_path.go
│   │   ├── gjson_implements.go
│   │   ├── gjson_stdlib_json_util.go
│   │   ├── gjson_z_bench_test.go
│   │   ├── gjson_z_example_conversion_test.go
│   │   ├── gjson_z_example_dataset_test.go
│   │   ├── gjson_z_example_load_test.go
│   │   ├── gjson_z_example_new_test.go
│   │   ├── gjson_z_example_pattern_test.go
│   │   ├── gjson_z_example_test.go
│   │   ├── gjson_z_unit_feature_json_test.go
│   │   ├── gjson_z_unit_feature_load_test.go
│   │   ├── gjson_z_unit_feature_new_test.go
│   │   ├── gjson_z_unit_feature_set_test.go
│   │   ├── gjson_z_unit_feature_struct_test.go
│   │   ├── gjson_z_unit_implements_test.go
│   │   ├── gjson_z_unit_internal_test.go
│   │   ├── gjson_z_unit_test.go
│   │   └── testdata/
│   │       ├── json/
│   │       │   └── data1.json
│   │       ├── properties/
│   │       │   └── data1.properties
│   │       ├── toml/
│   │       │   └── data1.toml
│   │       ├── xml/
│   │       │   └── data1.xml
│   │       └── yaml/
│   │           ├── data1.yaml
│   │           └── i18n-issue.yaml
│   ├── gproperties/
│   │   ├── gproperties.go
│   │   └── gproperties_z_unit_test.go
│   ├── gtoml/
│   │   ├── gtoml.go
│   │   └── gtoml_z_unit_test.go
│   ├── gurl/
│   │   ├── url.go
│   │   └── url_z_unit_test.go
│   ├── gxml/
│   │   ├── gxml.go
│   │   └── gxml_z_unit_test.go
│   └── gyaml/
│       ├── gyaml.go
│       └── gyaml_z_unit_test.go
├── errors/
│   ├── gcode/
│   │   ├── gcode.go
│   │   ├── gcode_local.go
│   │   └── gcode_z_unit_test.go
│   └── gerror/
│       ├── gerror.go
│       ├── gerror_api.go
│       ├── gerror_api_code.go
│       ├── gerror_api_option.go
│       ├── gerror_api_stack.go
│       ├── gerror_error.go
│       ├── gerror_error_code.go
│       ├── gerror_error_format.go
│       ├── gerror_error_json.go
│       ├── gerror_error_stack.go
│       ├── gerror_z_bench_test.go
│       ├── gerror_z_example_test.go
│       └── gerror_z_unit_test.go
├── frame/
│   ├── g/
│   │   ├── g.go
│   │   ├── g_func.go
│   │   ├── g_object.go
│   │   ├── g_setting.go
│   │   ├── g_z_example_test.go
│   │   └── g_z_unit_test.go
│   └── gins/
│       ├── gins.go
│       ├── gins_config.go
│       ├── gins_database.go
│       ├── gins_httpclient.go
│       ├── gins_i18n.go
│       ├── gins_log.go
│       ├── gins_redis.go
│       ├── gins_resource.go
│       ├── gins_server.go
│       ├── gins_view.go
│       ├── gins_z_unit_config_test.go
│       ├── gins_z_unit_database_test.go
│       ├── gins_z_unit_httpclient_test.go
│       ├── gins_z_unit_server_test.go
│       ├── gins_z_unit_view_test.go
│       └── testdata/
│           ├── config/
│           │   └── config.toml
│           ├── database/
│           │   └── config.toml
│           ├── redis/
│           │   └── config.toml
│           ├── server/
│           │   └── config.yaml
│           ├── view1/
│           │   ├── config.toml
│           │   ├── test1.html
│           │   └── test2.html
│           └── view2/
│               ├── config.toml
│               └── test.html
├── go.mod
├── go.sum
├── i18n/
│   └── gi18n/
│       ├── gi18n.go
│       ├── gi18n_ctx.go
│       ├── gi18n_instance.go
│       ├── gi18n_manager.go
│       ├── gi18n_z_unit_test.go
│       └── testdata/
│           ├── i18n/
│           │   ├── en.toml
│           │   ├── ja.toml
│           │   ├── ru.toml
│           │   ├── zh-CN.json
│           │   └── zh-TW.toml
│           ├── i18n-dir/
│           │   ├── en/
│           │   │   ├── hello.toml
│           │   │   └── world.toml
│           │   ├── ja/
│           │   │   ├── hello.yaml
│           │   │   └── world.yaml
│           │   ├── ru/
│           │   │   ├── hello.ini
│           │   │   └── world.ini
│           │   ├── zh-CN/
│           │   │   ├── hello.json
│           │   │   └── world.json
│           │   └── zh-TW/
│           │       ├── hello.xml
│           │       └── world.xml
│           ├── i18n-file/
│           │   ├── en.toml
│           │   ├── ja.yaml
│           │   ├── ru.ini
│           │   ├── zh-CN.json
│           │   └── zh-TW.xml
│           └── issue-yaml/
│               └── zh.yaml
├── internal/
│   ├── command/
│   │   └── command.go
│   ├── consts/
│   │   └── consts.go
│   ├── deepcopy/
│   │   ├── deepcopy.go
│   │   └── deepcopy_test.go
│   ├── empty/
│   │   ├── empty.go
│   │   └── empty_z_unit_test.go
│   ├── errors/
│   │   ├── errors.go
│   │   └── errors_test.go
│   ├── fileinfo/
│   │   └── fileinfo.go
│   ├── httputil/
│   │   ├── httputils.go
│   │   └── httputils_test.go
│   ├── instance/
│   │   ├── instance.go
│   │   └── instance_test.go
│   ├── intlog/
│   │   └── intlog.go
│   ├── json/
│   │   └── json.go
│   ├── mutex/
│   │   ├── mutex.go
│   │   ├── mutex_z_bench_test.go
│   │   └── mutex_z_unit_test.go
│   ├── reflection/
│   │   ├── reflection.go
│   │   └── reflection_test.go
│   ├── rwmutex/
│   │   ├── rwmutex.go
│   │   ├── rwmutex_z_bench_test.go
│   │   └── rwmutex_z_unit_test.go
│   ├── tracing/
│   │   └── tracing.go
│   └── utils/
│       ├── utils.go
│       ├── utils_array.go
│       ├── utils_debug.go
│       ├── utils_io.go
│       ├── utils_is.go
│       ├── utils_list.go
│       ├── utils_map.go
│       ├── utils_reflect.go
│       ├── utils_str.go
│       ├── utils_z_bench_test.go
│       ├── utils_z_unit_is_test.go
│       └── utils_z_unit_test.go
├── net/
│   ├── gclient/
│   │   ├── gclient.go
│   │   ├── gclient_bytes.go
│   │   ├── gclient_chain.go
│   │   ├── gclient_config.go
│   │   ├── gclient_content.go
│   │   ├── gclient_discovery.go
│   │   ├── gclient_dump.go
│   │   ├── gclient_metrics.go
│   │   ├── gclient_middleware.go
│   │   ├── gclient_observability.go
│   │   ├── gclient_request.go
│   │   ├── gclient_request_obj.go
│   │   ├── gclient_response.go
│   │   ├── gclient_tracer.go
│   │   ├── gclient_tracer_metrics.go
│   │   ├── gclient_tracer_noop.go
│   │   ├── gclient_tracer_tracing.go
│   │   ├── gclient_var.go
│   │   ├── gclient_websocket.go
│   │   ├── gclient_z_example_test.go
│   │   ├── gclient_z_unit_feature_trace_test.go
│   │   ├── gclient_z_unit_issue_test.go
│   │   ├── gclient_z_unit_request_obj_test.go
│   │   ├── gclient_z_unit_test.go
│   │   └── testdata/
│   │       ├── server.crt
│   │       ├── server.key
│   │       └── upload/
│   │           ├── file1.txt
│   │           └── file2.txt
│   ├── ghttp/
│   │   ├── ghttp.go
│   │   ├── ghttp_func.go
│   │   ├── ghttp_middleware_cors.go
│   │   ├── ghttp_middleware_gzip.go
│   │   ├── ghttp_middleware_handler_response.go
│   │   ├── ghttp_middleware_json_body.go
│   │   ├── ghttp_middleware_never_done_ctx.go
│   │   ├── ghttp_middleware_tracing.go
│   │   ├── ghttp_request.go
│   │   ├── ghttp_request_auth.go
│   │   ├── ghttp_request_middleware.go
│   │   ├── ghttp_request_param.go
│   │   ├── ghttp_request_param_ctx.go
│   │   ├── ghttp_request_param_file.go
│   │   ├── ghttp_request_param_form.go
│   │   ├── ghttp_request_param_handler.go
│   │   ├── ghttp_request_param_page.go
│   │   ├── ghttp_request_param_param.go
│   │   ├── ghttp_request_param_query.go
│   │   ├── ghttp_request_param_request.go
│   │   ├── ghttp_request_param_router.go
│   │   ├── ghttp_request_view.go
│   │   ├── ghttp_response.go
│   │   ├── ghttp_response_cors.go
│   │   ├── ghttp_response_view.go
│   │   ├── ghttp_response_write.go
│   │   ├── ghttp_server.go
│   │   ├── ghttp_server_admin.go
│   │   ├── ghttp_server_admin_process.go
│   │   ├── ghttp_server_admin_unix.go
│   │   ├── ghttp_server_admin_windows.go
│   │   ├── ghttp_server_config.go
│   │   ├── ghttp_server_config_api.go
│   │   ├── ghttp_server_config_cookie.go
│   │   ├── ghttp_server_config_logging.go
│   │   ├── ghttp_server_config_mess.go
│   │   ├── ghttp_server_config_route.go
│   │   ├── ghttp_server_config_session.go
│   │   ├── ghttp_server_config_static.go
│   │   ├── ghttp_server_cookie.go
│   │   ├── ghttp_server_domain.go
│   │   ├── ghttp_server_error_logger.go
│   │   ├── ghttp_server_graceful.go
│   │   ├── ghttp_server_handler.go
│   │   ├── ghttp_server_log.go
│   │   ├── ghttp_server_metric.go
│   │   ├── ghttp_server_openapi.go
│   │   ├── ghttp_server_plugin.go
│   │   ├── ghttp_server_pprof.go
│   │   ├── ghttp_server_registry.go
│   │   ├── ghttp_server_router.go
│   │   ├── ghttp_server_router_group.go
│   │   ├── ghttp_server_router_hook.go
│   │   ├── ghttp_server_router_middleware.go
│   │   ├── ghttp_server_router_serve.go
│   │   ├── ghttp_server_service_handler.go
│   │   ├── ghttp_server_service_object.go
│   │   ├── ghttp_server_session.go
│   │   ├── ghttp_server_status.go
│   │   ├── ghttp_server_swagger.go
│   │   ├── ghttp_server_util.go
│   │   ├── ghttp_server_websocket.go
│   │   ├── ghttp_z_bench_test.go
│   │   ├── ghttp_z_example_test.go
│   │   ├── ghttp_z_unit_feature_config_test.go
│   │   ├── ghttp_z_unit_feature_context_test.go
│   │   ├── ghttp_z_unit_feature_cookie_test.go
│   │   ├── ghttp_z_unit_feature_custom_listeners_test.go
│   │   ├── ghttp_z_unit_feature_error_code_test.go
│   │   ├── ghttp_z_unit_feature_https_test.go
│   │   ├── ghttp_z_unit_feature_ip_test.go
│   │   ├── ghttp_z_unit_feature_log_test.go
│   │   ├── ghttp_z_unit_feature_middleware_basic_test.go
│   │   ├── ghttp_z_unit_feature_middleware_cors_test.go
│   │   ├── ghttp_z_unit_feature_openapi_swagger_test.go
│   │   ├── ghttp_z_unit_feature_otel_test.go
│   │   ├── ghttp_z_unit_feature_pprof_test.go
│   │   ├── ghttp_z_unit_feature_request_ctx_test.go
│   │   ├── ghttp_z_unit_feature_request_file_test.go
│   │   ├── ghttp_z_unit_feature_request_json_test.go
│   │   ├── ghttp_z_unit_feature_request_page_test.go
│   │   ├── ghttp_z_unit_feature_request_param_test.go
│   │   ├── ghttp_z_unit_feature_request_struct_test.go
│   │   ├── ghttp_z_unit_feature_request_test.go
│   │   ├── ghttp_z_unit_feature_request_xml_test.go
│   │   ├── ghttp_z_unit_feature_response_test.go
│   │   ├── ghttp_z_unit_feature_router_basic_test.go
│   │   ├── ghttp_z_unit_feature_router_domain_basic_test.go
│   │   ├── ghttp_z_unit_feature_router_domain_object_rest_test.go
│   │   ├── ghttp_z_unit_feature_router_domain_object_test.go
│   │   ├── ghttp_z_unit_feature_router_exit_test.go
│   │   ├── ghttp_z_unit_feature_router_group_group_test.go
│   │   ├── ghttp_z_unit_feature_router_group_hook_test.go
│   │   ├── ghttp_z_unit_feature_router_group_rest_test.go
│   │   ├── ghttp_z_unit_feature_router_group_test.go
│   │   ├── ghttp_z_unit_feature_router_hook_test.go
│   │   ├── ghttp_z_unit_feature_router_names_test.go
│   │   ├── ghttp_z_unit_feature_router_object_rest1_test.go
│   │   ├── ghttp_z_unit_feature_router_object_rest2_test.go
│   │   ├── ghttp_z_unit_feature_router_object_test.go
│   │   ├── ghttp_z_unit_feature_router_standard_test.go
│   │   ├── ghttp_z_unit_feature_server_util_test.go
│   │   ├── ghttp_z_unit_feature_session_test.go
│   │   ├── ghttp_z_unit_feature_static_test.go
│   │   ├── ghttp_z_unit_feature_status_test.go
│   │   ├── ghttp_z_unit_feature_template_test.go
│   │   ├── ghttp_z_unit_feature_websocket_test.go
│   │   ├── ghttp_z_unit_issue_test.go
│   │   ├── ghttp_z_unit_middleware_gzip_test.go
│   │   ├── ghttp_z_unit_test.go
│   │   ├── internal/
│   │   │   ├── graceful/
│   │   │   │   └── graceful.go
│   │   │   ├── response/
│   │   │   │   ├── response.go
│   │   │   │   ├── response_buffer_writer.go
│   │   │   │   └── response_writer.go
│   │   │   └── swaggerui/
│   │   │       ├── swaggerui-redoc.go
│   │   │       └── swaggerui.go
│   │   └── testdata/
│   │       ├── https/
│   │       │   ├── files/
│   │       │   │   ├── server.crt
│   │       │   │   └── server.key
│   │       │   └── packed/
│   │       │       └── packed.go
│   │       ├── issue1611/
│   │       │   ├── header.html
│   │       │   └── index/
│   │       │       └── layout.html
│   │       ├── issue2963/
│   │       │   ├── 1.txt
│   │       │   └── 中文G146(1)-icon.txt
│   │       ├── main.html
│   │       ├── static1/
│   │       │   ├── index.html
│   │       │   └── test.html
│   │       ├── template/
│   │       │   ├── basic/
│   │       │   │   └── index.html
│   │       │   ├── layout1/
│   │       │   │   ├── container.html
│   │       │   │   ├── footer.html
│   │       │   │   ├── header.html
│   │       │   │   └── layout.html
│   │       │   └── layout2/
│   │       │       ├── footer.html
│   │       │       ├── header.html
│   │       │       ├── layout.html
│   │       │       └── main/
│   │       │           ├── main1.html
│   │       │           └── main2.html
│   │       └── upload/
│   │           ├── file1.txt
│   │           ├── file2.txt
│   │           └── 中文.txt
│   ├── gipv4/
│   │   ├── gipv4.go
│   │   ├── gipv4_convert.go
│   │   ├── gipv4_ip.go
│   │   ├── gipv4_lookup.go
│   │   ├── gipv4_mac.go
│   │   ├── gipv4_z_unit_convert_test.go
│   │   ├── gipv4_z_unit_ip_test.go
│   │   ├── gipv4_z_unit_lookup_test.go
│   │   ├── gipv4_z_unit_mac_test.go
│   │   └── gipv4_z_unit_test.go
│   ├── gipv6/
│   │   └── gipv6.go
│   ├── goai/
│   │   ├── goai.go
│   │   ├── goai_callback.go
│   │   ├── goai_components.go
│   │   ├── goai_config.go
│   │   ├── goai_example.go
│   │   ├── goai_external_docs.go
│   │   ├── goai_header.go
│   │   ├── goai_info.go
│   │   ├── goai_link.go
│   │   ├── goai_mediatype.go
│   │   ├── goai_operation.go
│   │   ├── goai_parameter.go
│   │   ├── goai_parameter_ref.go
│   │   ├── goai_path.go
│   │   ├── goai_requestbody.go
│   │   ├── goai_response.go
│   │   ├── goai_response_ref.go
│   │   ├── goai_security.go
│   │   ├── goai_server.go
│   │   ├── goai_shema.go
│   │   ├── goai_shema_ref.go
│   │   ├── goai_shemas.go
│   │   ├── goai_tags.go
│   │   ├── goai_xextensions.go
│   │   ├── goai_z_unit_generic_type_test.go
│   │   ├── goai_z_unit_issue_test.go
│   │   ├── goai_z_unit_test.go
│   │   └── testdata/
│   │       ├── EmbeddedStructAttribute/
│   │       │   └── expect.json
│   │       ├── Issue3889JsonFile/
│   │       │   └── 201.json
│   │       ├── NameFromJsonTag/
│   │       │   ├── expect1.json
│   │       │   └── expect2.json
│   │       ├── XExtension/
│   │       │   └── expect.json
│   │       └── example.yaml
│   ├── gsel/
│   │   ├── gsel.go
│   │   ├── gsel_builder.go
│   │   ├── gsel_builder_least_connection.go
│   │   ├── gsel_builder_random.go
│   │   ├── gsel_builder_round_robin.go
│   │   ├── gsel_builder_weight.go
│   │   ├── gsel_selector_least_connection.go
│   │   ├── gsel_selector_random.go
│   │   ├── gsel_selector_round_robin.go
│   │   └── gsel_selector_weight.go
│   ├── gsvc/
│   │   ├── gsvc.go
│   │   ├── gsvc_discovery.go
│   │   ├── gsvc_endpoint.go
│   │   ├── gsvc_endpoints.go
│   │   ├── gsvc_metadata.go
│   │   ├── gsvc_registry.go
│   │   └── gsvc_service.go
│   ├── gtcp/
│   │   ├── gtcp.go
│   │   ├── gtcp_conn.go
│   │   ├── gtcp_conn_pkg.go
│   │   ├── gtcp_func.go
│   │   ├── gtcp_func_pkg.go
│   │   ├── gtcp_pool.go
│   │   ├── gtcp_pool_pkg.go
│   │   ├── gtcp_server.go
│   │   ├── gtcp_z_example_test.go
│   │   ├── gtcp_z_unit_conn_pkg_test.go
│   │   ├── gtcp_z_unit_pool_pkg_test.go
│   │   ├── gtcp_z_unit_pool_test.go
│   │   ├── gtcp_z_unit_test.go
│   │   └── testdata/
│   │       ├── crtFile
│   │       ├── keyFile
│   │       ├── server.crt
│   │       └── server.key
│   ├── gtrace/
│   │   ├── gtrace.go
│   │   ├── gtrace_baggage.go
│   │   ├── gtrace_carrier.go
│   │   ├── gtrace_content.go
│   │   ├── gtrace_span.go
│   │   ├── gtrace_tracer.go
│   │   ├── gtrace_z_unit_carrier_test.go
│   │   ├── gtrace_z_unit_feature_http_test.go
│   │   ├── gtrace_z_unit_test.go
│   │   └── internal/
│   │       └── provider/
│   │           ├── provider.go
│   │           └── provider_idgenerator.go
│   └── gudp/
│       ├── gudp.go
│       ├── gudp_conn.go
│       ├── gudp_conn_client_conn.go
│       ├── gudp_conn_server_conn.go
│       ├── gudp_func.go
│       ├── gudp_server.go
│       ├── gudp_z_example_test.go
│       └── gudp_z_unit_test.go
├── os/
│   ├── gbuild/
│   │   ├── gbuild.go
│   │   └── gbuild_z_unit_test.go
│   ├── gcache/
│   │   ├── gcache.go
│   │   ├── gcache_adapter.go
│   │   ├── gcache_adapter_memory.go
│   │   ├── gcache_adapter_memory_data.go
│   │   ├── gcache_adapter_memory_expire_sets.go
│   │   ├── gcache_adapter_memory_expire_times.go
│   │   ├── gcache_adapter_memory_item.go
│   │   ├── gcache_adapter_memory_lru.go
│   │   ├── gcache_adapter_redis.go
│   │   ├── gcache_cache.go
│   │   ├── gcache_cache_must.go
│   │   ├── gcache_z_bench_test.go
│   │   ├── gcache_z_example_cache_test.go
│   │   └── gcache_z_unit_test.go
│   ├── gcfg/
│   │   ├── gcfg.go
│   │   ├── gcfg_adaper.go
│   │   ├── gcfg_adapter_content.go
│   │   ├── gcfg_adapter_content_ctx.go
│   │   ├── gcfg_adapter_file.go
│   │   ├── gcfg_adapter_file_content.go
│   │   ├── gcfg_adapter_file_ctx.go
│   │   ├── gcfg_adapter_file_path.go
│   │   ├── gcfg_ctx_keys.go
│   │   ├── gcfg_loader.go
│   │   ├── gcfg_watcher_registry.go
│   │   ├── gcfg_watcher_registry_test.go
│   │   ├── gcfg_z_example_test.go
│   │   ├── gcfg_z_unit_adapter_content_test.go
│   │   ├── gcfg_z_unit_adapter_file_test.go
│   │   ├── gcfg_z_unit_basic_test.go
│   │   ├── gcfg_z_unit_instance_test.go
│   │   ├── gcfg_z_unit_loader_test.go
│   │   ├── gcfg_z_unit_test.go
│   │   ├── gcfg_z_unit_watcher_test.go
│   │   └── testdata/
│   │       ├── c1.toml
│   │       ├── cfg-with-utf8-bom.toml
│   │       ├── default/
│   │       │   ├── config.json
│   │       │   └── config.toml
│   │       ├── envfile/
│   │       │   └── c6.json
│   │       ├── envpath/
│   │       │   ├── c3.toml
│   │       │   └── c4.json
│   │       └── folder1/
│   │           ├── c1.toml
│   │           └── c2.json
│   ├── gcmd/
│   │   ├── gcmd.go
│   │   ├── gcmd_command.go
│   │   ├── gcmd_command_help.go
│   │   ├── gcmd_command_object.go
│   │   ├── gcmd_command_run.go
│   │   ├── gcmd_parser.go
│   │   ├── gcmd_scan.go
│   │   ├── gcmd_z_example_test.go
│   │   ├── gcmd_z_unit_feature_object1_test.go
│   │   ├── gcmd_z_unit_feature_object2_test.go
│   │   ├── gcmd_z_unit_feature_object3_test.go
│   │   ├── gcmd_z_unit_feature_object4_test.go
│   │   ├── gcmd_z_unit_issue_test.go
│   │   ├── gcmd_z_unit_parser_test.go
│   │   └── gcmd_z_unit_test.go
│   ├── gcron/
│   │   ├── gcron.go
│   │   ├── gcron_cron.go
│   │   ├── gcron_entry.go
│   │   ├── gcron_schedule.go
│   │   ├── gcron_schedule_check.go
│   │   ├── gcron_schedule_fix.go
│   │   ├── gcron_schedule_next.go
│   │   ├── gcron_z_bench_test.go
│   │   ├── gcron_z_example_1_test.go
│   │   ├── gcron_z_unit_entry_test.go
│   │   ├── gcron_z_unit_schedule_test.go
│   │   └── gcron_z_unit_test.go
│   ├── gctx/
│   │   ├── gctx.go
│   │   ├── gctx_never_done.go
│   │   ├── gctx_z_unit_internal_test.go
│   │   └── gctx_z_unit_test.go
│   ├── genv/
│   │   ├── genv.go
│   │   ├── genv_must.go
│   │   └── genv_z_unit_test.go
│   ├── gfile/
│   │   ├── gfile.go
│   │   ├── gfile_cache.go
│   │   ├── gfile_contents.go
│   │   ├── gfile_copy.go
│   │   ├── gfile_home.go
│   │   ├── gfile_match.go
│   │   ├── gfile_replace.go
│   │   ├── gfile_scan.go
│   │   ├── gfile_search.go
│   │   ├── gfile_size.go
│   │   ├── gfile_sort.go
│   │   ├── gfile_source.go
│   │   ├── gfile_time.go
│   │   ├── gfile_z_example_cache_test.go
│   │   ├── gfile_z_example_contents_test.go
│   │   ├── gfile_z_example_copy_test.go
│   │   ├── gfile_z_example_home_test.go
│   │   ├── gfile_z_example_replace_test.go
│   │   ├── gfile_z_example_scan_test.go
│   │   ├── gfile_z_example_search_test.go
│   │   ├── gfile_z_example_size_test.go
│   │   ├── gfile_z_example_sort_test.go
│   │   ├── gfile_z_example_time_test.go
│   │   ├── gfile_z_exmaple_basic_test.go
│   │   ├── gfile_z_unit_cache_test.go
│   │   ├── gfile_z_unit_contents_test.go
│   │   ├── gfile_z_unit_copy_test.go
│   │   ├── gfile_z_unit_match_test.go
│   │   ├── gfile_z_unit_replace_test.go
│   │   ├── gfile_z_unit_scan_test.go
│   │   ├── gfile_z_unit_search_test.go
│   │   ├── gfile_z_unit_size_test.go
│   │   ├── gfile_z_unit_sort_test.go
│   │   ├── gfile_z_unit_test.go
│   │   ├── gfile_z_unit_time_test.go
│   │   └── testdata/
│   │       ├── dir1/
│   │       │   └── file1
│   │       ├── dir2/
│   │       │   └── file2
│   │       └── readline/
│   │           └── file.log
│   ├── gfpool/
│   │   ├── gfpool.go
│   │   ├── gfpool_file.go
│   │   ├── gfpool_pool.go
│   │   ├── gfpool_z_bench_test.go
│   │   └── gfpool_z_unit_test.go
│   ├── gfsnotify/
│   │   ├── gfsnotify.go
│   │   ├── gfsnotify_event.go
│   │   ├── gfsnotify_filefunc.go
│   │   ├── gfsnotify_watcher.go
│   │   ├── gfsnotify_watcher_loop.go
│   │   └── gfsnotify_z_unit_test.go
│   ├── glog/
│   │   ├── glog.go
│   │   ├── glog_api.go
│   │   ├── glog_chaining.go
│   │   ├── glog_config.go
│   │   ├── glog_instance.go
│   │   ├── glog_logger.go
│   │   ├── glog_logger_api.go
│   │   ├── glog_logger_chaining.go
│   │   ├── glog_logger_color.go
│   │   ├── glog_logger_config.go
│   │   ├── glog_logger_handler.go
│   │   ├── glog_logger_handler_json.go
│   │   ├── glog_logger_handler_structure.go
│   │   ├── glog_logger_level.go
│   │   ├── glog_logger_rotate.go
│   │   ├── glog_logger_writer.go
│   │   ├── glog_z_example_test.go
│   │   ├── glog_z_unit_config_test.go
│   │   ├── glog_z_unit_internal_test.go
│   │   ├── glog_z_unit_logger_chaining_test.go
│   │   ├── glog_z_unit_logger_handler_test.go
│   │   ├── glog_z_unit_logger_rotate_test.go
│   │   └── glog_z_unit_test.go
│   ├── gmetric/
│   │   ├── gmetric.go
│   │   ├── gmetric_attribute.go
│   │   ├── gmetric_attribute_map.go
│   │   ├── gmetric_global_attributes.go
│   │   ├── gmetric_meter.go
│   │   ├── gmetric_meter_callback.go
│   │   ├── gmetric_meter_counter.go
│   │   ├── gmetric_meter_histogram.go
│   │   ├── gmetric_meter_metric_info.go
│   │   ├── gmetric_meter_metric_instrument.go
│   │   ├── gmetric_meter_observable_counter.go
│   │   ├── gmetric_meter_observable_gauge.go
│   │   ├── gmetric_meter_observable_updown_counter.go
│   │   ├── gmetric_meter_updown_counter.go
│   │   ├── gmetric_metric.go
│   │   ├── gmetric_noop_counter_performer.go
│   │   ├── gmetric_noop_histogram_performer.go
│   │   ├── gmetric_noop_observable_counter_performer.go
│   │   ├── gmetric_noop_observable_gauge_performer.go
│   │   ├── gmetric_noop_observable_updown_counter_performer.go
│   │   ├── gmetric_noop_updown_counter_performer.go
│   │   ├── gmetric_provider.go
│   │   ├── gmetric_z_unit_internal_test.go
│   │   └── gmetric_z_unit_test.go
│   ├── gmlock/
│   │   ├── gmlock.go
│   │   ├── gmlock_locker.go
│   │   ├── gmlock_z_bench_test.go
│   │   └── gmlock_z_unit_test.go
│   ├── gmutex/
│   │   ├── gmutex.go
│   │   ├── gmutex_mutex.go
│   │   ├── gmutex_rwmutex.go
│   │   ├── gmutex_z_bench_test.go
│   │   ├── gmutex_z_unit_mutex_test.go
│   │   └── gmutex_z_unit_rwmutex_test.go
│   ├── gproc/
│   │   ├── gproc.go
│   │   ├── gproc_comm.go
│   │   ├── gproc_comm_receive.go
│   │   ├── gproc_comm_send.go
│   │   ├── gproc_manager.go
│   │   ├── gproc_must.go
│   │   ├── gproc_process.go
│   │   ├── gproc_process_newprocess.go
│   │   ├── gproc_process_newprocess_windows.go
│   │   ├── gproc_shell.go
│   │   ├── gproc_signal.go
│   │   ├── gproc_z_signal_test.go
│   │   ├── gproc_z_unit_process_windows_test.go
│   │   ├── gproc_z_unit_shell_windows_test.go
│   │   ├── gproc_z_unit_test.go
│   │   └── testdata/
│   │       ├── gobuild/
│   │       │   └── main.go
│   │       └── shellexec/
│   │           └── main.go
│   ├── gres/
│   │   ├── gres.go
│   │   ├── gres_file.go
│   │   ├── gres_func.go
│   │   ├── gres_func_zip.go
│   │   ├── gres_http_file.go
│   │   ├── gres_instance.go
│   │   ├── gres_resource.go
│   │   ├── gres_z_unit_test.go
│   │   └── testdata/
│   │       ├── data/
│   │       │   └── data.go
│   │       ├── example/
│   │       │   ├── boot/
│   │       │   │   └── data.go
│   │       │   └── files/
│   │       │       ├── config/
│   │       │       │   └── config.toml
│   │       │       ├── public/
│   │       │       │   └── index.html
│   │       │       └── template/
│   │       │           └── index.tpl
│   │       ├── files/
│   │       │   ├── config-custom/
│   │       │   │   ├── config.toml
│   │       │   │   └── my.ini
│   │       │   ├── config-res/
│   │       │   │   ├── config.toml
│   │       │   │   └── my.ini
│   │       │   ├── dir1/
│   │       │   │   ├── sub/
│   │       │   │   │   └── sub-test1.txt
│   │       │   │   └── test1
│   │       │   ├── dir2/
│   │       │   │   ├── sub/
│   │       │   │   │   └── sub-test2.txt
│   │       │   │   └── test2
│   │       │   ├── i18n-dir/
│   │       │   │   ├── en/
│   │       │   │   │   ├── hello.toml
│   │       │   │   │   └── world.toml
│   │       │   │   ├── ja/
│   │       │   │   │   ├── hello.yaml
│   │       │   │   │   └── world.yaml
│   │       │   │   ├── ru/
│   │       │   │   │   ├── hello.ini
│   │       │   │   │   └── world.ini
│   │       │   │   ├── zh-CN/
│   │       │   │   │   ├── hello.json
│   │       │   │   │   └── world.json
│   │       │   │   └── zh-TW/
│   │       │   │       ├── hello.xml
│   │       │   │       └── world.xml
│   │       │   ├── i18n-file/
│   │       │   │   ├── en.toml
│   │       │   │   ├── ja.yaml
│   │       │   │   ├── ru.ini
│   │       │   │   ├── zh-CN.json
│   │       │   │   └── zh-TW.xml
│   │       │   ├── i18n-res/
│   │       │   │   ├── en.toml
│   │       │   │   ├── ja.toml
│   │       │   │   ├── ru.toml
│   │       │   │   ├── zh-CN.toml
│   │       │   │   └── zh-TW.toml
│   │       │   ├── root/
│   │       │   │   ├── css/
│   │       │   │   │   └── style.css
│   │       │   │   └── index.html
│   │       │   └── template-res/
│   │       │       ├── index.html
│   │       │       ├── layout1/
│   │       │       │   ├── container.html
│   │       │       │   ├── footer.html
│   │       │       │   ├── header.html
│   │       │       │   └── layout.html
│   │       │       └── layout2/
│   │       │           ├── footer.html
│   │       │           ├── header.html
│   │       │           ├── layout.html
│   │       │           └── main/
│   │       │               ├── main1.html
│   │       │               └── main2.html
│   │       ├── testdata.go
│   │       └── testdata.txt
│   ├── grpool/
│   │   ├── grpool.go
│   │   ├── grpool_pool.go
│   │   ├── grpool_supervisor.go
│   │   ├── grpool_z_bench_test.go
│   │   └── grpool_z_unit_test.go
│   ├── gsession/
│   │   ├── gsession.go
│   │   ├── gsession_manager.go
│   │   ├── gsession_session.go
│   │   ├── gsession_storage.go
│   │   ├── gsession_storage_base.go
│   │   ├── gsession_storage_file.go
│   │   ├── gsession_storage_memory.go
│   │   ├── gsession_storage_redis.go
│   │   ├── gsession_storage_redis_hashtable.go
│   │   ├── gsession_z_example_test.go
│   │   ├── gsession_z_unit_storage_file_test.go
│   │   ├── gsession_z_unit_storage_memory_test.go
│   │   └── gsession_z_unit_test.go
│   ├── gspath/
│   │   ├── gspath.go
│   │   ├── gspath_cache.go
│   │   └── gspath_z_unit_test.go
│   ├── gstructs/
│   │   ├── gstructs.go
│   │   ├── gstructs_field.go
│   │   ├── gstructs_field_tag.go
│   │   ├── gstructs_tag.go
│   │   ├── gstructs_type.go
│   │   ├── gstructs_z_bench_test.go
│   │   └── gstructs_z_unit_test.go
│   ├── gtime/
│   │   ├── gtime.go
│   │   ├── gtime_format.go
│   │   ├── gtime_sql.go
│   │   ├── gtime_time.go
│   │   ├── gtime_time_wrapper.go
│   │   ├── gtime_time_zone.go
│   │   ├── gtime_z_bench_test.go
│   │   ├── gtime_z_example_basic_test.go
│   │   ├── gtime_z_example_time_test.go
│   │   ├── gtime_z_unit_feature_json_test.go
│   │   ├── gtime_z_unit_feature_sql_test.go
│   │   ├── gtime_z_unit_format_test.go
│   │   ├── gtime_z_unit_issue_test.go
│   │   ├── gtime_z_unit_test.go
│   │   └── gtime_z_unit_time_test.go
│   ├── gtimer/
│   │   ├── gtimer.go
│   │   ├── gtimer_entry.go
│   │   ├── gtimer_exit.go
│   │   ├── gtimer_queue.go
│   │   ├── gtimer_queue_heap.go
│   │   ├── gtimer_timer.go
│   │   ├── gtimer_timer_loop.go
│   │   ├── gtimer_z_bench_test.go
│   │   ├── gtimer_z_example_test.go
│   │   ├── gtimer_z_unit_entry_test.go
│   │   ├── gtimer_z_unit_internal_test.go
│   │   ├── gtimer_z_unit_test.go
│   │   └── gtimer_z_unit_timer_test.go
│   └── gview/
│       ├── gview.go
│       ├── gview_buildin.go
│       ├── gview_config.go
│       ├── gview_error.go
│       ├── gview_i18n.go
│       ├── gview_instance.go
│       ├── gview_parse.go
│       ├── gview_z_unit_config_test.go
│       ├── gview_z_unit_feature_encode_test.go
│       ├── gview_z_unit_i18n_test.go
│       ├── gview_z_unit_test.go
│       └── testdata/
│           ├── config/
│           │   └── test.html
│           ├── i18n/
│           │   ├── en.toml
│           │   ├── ja.toml
│           │   ├── ru.toml
│           │   ├── zh-CN.toml
│           │   └── zh-TW.toml
│           ├── issue1416/
│           │   ├── gview copy.tpl
│           │   └── gview.tpl
│           └── tpl/
│               └── encode.tpl
├── sonar-project.properties
├── test/
│   └── gtest/
│       ├── gtest.go
│       ├── gtest_t.go
│       ├── gtest_util.go
│       ├── gtest_z_unit_test.go
│       └── testdata/
│           └── testdata.txt
├── text/
│   ├── gregex/
│   │   ├── gregex.go
│   │   ├── gregex_cache.go
│   │   ├── gregex_z_bench_test.go
│   │   ├── gregex_z_example_test.go
│   │   └── gregex_z_unit_test.go
│   └── gstr/
│       ├── gstr.go
│       ├── gstr_array.go
│       ├── gstr_case.go
│       ├── gstr_compare.go
│       ├── gstr_contain.go
│       ├── gstr_convert.go
│       ├── gstr_count.go
│       ├── gstr_create.go
│       ├── gstr_domain.go
│       ├── gstr_is.go
│       ├── gstr_length.go
│       ├── gstr_list.go
│       ├── gstr_parse.go
│       ├── gstr_pos.go
│       ├── gstr_replace.go
│       ├── gstr_similar.go
│       ├── gstr_slashes.go
│       ├── gstr_split_join.go
│       ├── gstr_sub.go
│       ├── gstr_trim.go
│       ├── gstr_upper_lower.go
│       ├── gstr_version.go
│       ├── gstr_z_example_test.go
│       ├── gstr_z_unit_array_test.go
│       ├── gstr_z_unit_case_test.go
│       ├── gstr_z_unit_convert_test.go
│       ├── gstr_z_unit_domain_test.go
│       ├── gstr_z_unit_list_test.go
│       ├── gstr_z_unit_parse_test.go
│       ├── gstr_z_unit_pos_test.go
│       ├── gstr_z_unit_replace_test.go
│       ├── gstr_z_unit_test.go
│       ├── gstr_z_unit_trim_test.go
│       └── gstr_z_unit_version_test.go
├── util/
│   ├── gconv/
│   │   ├── gconv.go
│   │   ├── gconv_basic.go
│   │   ├── gconv_convert.go
│   │   ├── gconv_float.go
│   │   ├── gconv_int.go
│   │   ├── gconv_map.go
│   │   ├── gconv_maps.go
│   │   ├── gconv_maptomap.go
│   │   ├── gconv_maptomaps.go
│   │   ├── gconv_ptr.go
│   │   ├── gconv_scan.go
│   │   ├── gconv_scan_list.go
│   │   ├── gconv_slice_any.go
│   │   ├── gconv_slice_bool.go
│   │   ├── gconv_slice_float.go
│   │   ├── gconv_slice_int.go
│   │   ├── gconv_slice_str.go
│   │   ├── gconv_slice_uint.go
│   │   ├── gconv_struct.go
│   │   ├── gconv_structs.go
│   │   ├── gconv_time.go
│   │   ├── gconv_uint.go
│   │   ├── gconv_unsafe.go
│   │   ├── gconv_z_bench_bytes_test.go
│   │   ├── gconv_z_bench_float_test.go
│   │   ├── gconv_z_bench_int_test.go
│   │   ├── gconv_z_bench_reflect_test.go
│   │   ├── gconv_z_bench_str_test.go
│   │   ├── gconv_z_bench_struct_test.go
│   │   ├── gconv_z_unit_bool_test.go
│   │   ├── gconv_z_unit_byte_test.go
│   │   ├── gconv_z_unit_convert_test.go
│   │   ├── gconv_z_unit_converter_test.go
│   │   ├── gconv_z_unit_custom_base_type_test.go
│   │   ├── gconv_z_unit_float_test.go
│   │   ├── gconv_z_unit_int_test.go
│   │   ├── gconv_z_unit_interfaces_test.go
│   │   ├── gconv_z_unit_issue_test.go
│   │   ├── gconv_z_unit_map_test.go
│   │   ├── gconv_z_unit_ptr_test.go
│   │   ├── gconv_z_unit_rune_test.go
│   │   ├── gconv_z_unit_scan_basic_types_test.go
│   │   ├── gconv_z_unit_scan_list_test.go
│   │   ├── gconv_z_unit_scan_omit_test.go
│   │   ├── gconv_z_unit_scan_test.go
│   │   ├── gconv_z_unit_string_test.go
│   │   ├── gconv_z_unit_struct_marshal_unmarshal_test.go
│   │   ├── gconv_z_unit_struct_test.go
│   │   ├── gconv_z_unit_test.go
│   │   ├── gconv_z_unit_time_test.go
│   │   ├── gconv_z_unit_uint_test.go
│   │   ├── gconv_z_unit_unsafe_test.go
│   │   └── internal/
│   │       ├── converter/
│   │       │   ├── converter.go
│   │       │   ├── converter_bool.go
│   │       │   ├── converter_builtin.go
│   │       │   ├── converter_bytes.go
│   │       │   ├── converter_convert.go
│   │       │   ├── converter_float.go
│   │       │   ├── converter_int.go
│   │       │   ├── converter_map.go
│   │       │   ├── converter_maptomap.go
│   │       │   ├── converter_maptomaps.go
│   │       │   ├── converter_rune.go
│   │       │   ├── converter_scan.go
│   │       │   ├── converter_slice_any.go
│   │       │   ├── converter_slice_bool.go
│   │       │   ├── converter_slice_float.go
│   │       │   ├── converter_slice_int.go
│   │       │   ├── converter_slice_map.go
│   │       │   ├── converter_slice_str.go
│   │       │   ├── converter_slice_uint.go
│   │       │   ├── converter_string.go
│   │       │   ├── converter_struct.go
│   │       │   ├── converter_structs.go
│   │       │   ├── converter_time.go
│   │       │   └── converter_uint.go
│   │       ├── localinterface/
│   │       │   └── localinterface.go
│   │       └── structcache/
│   │           ├── structcache.go
│   │           ├── structcache_cached.go
│   │           ├── structcache_cached_field_info.go
│   │           ├── structcache_cached_struct_info.go
│   │           └── structcache_pool.go
│   ├── gmeta/
│   │   ├── gmeta.go
│   │   ├── gmeta_z_bench_test.go
│   │   └── gmeta_z_unit_test.go
│   ├── gmode/
│   │   ├── gmode.go
│   │   └── gmode_z_unit_test.go
│   ├── gpage/
│   │   ├── gpage.go
│   │   └── gpage_z_unit_test.go
│   ├── grand/
│   │   ├── grand.go
│   │   ├── grand_buffer.go
│   │   ├── grand_z_bench_test.go
│   │   └── grand_z_unit_test.go
│   ├── gtag/
│   │   ├── gtag.go
│   │   ├── gtag_enums.go
│   │   ├── gtag_func.go
│   │   ├── gtag_z_example_test.go
│   │   └── gtag_z_unit_test.go
│   ├── guid/
│   │   ├── guid.go
│   │   ├── guid_z_bench_test.go
│   │   └── guid_z_unit_test.go
│   ├── gutil/
│   │   ├── gutil.go
│   │   ├── gutil_comparator.go
│   │   ├── gutil_copy.go
│   │   ├── gutil_default.go
│   │   ├── gutil_dump.go
│   │   ├── gutil_goroutine.go
│   │   ├── gutil_is.go
│   │   ├── gutil_list.go
│   │   ├── gutil_map.go
│   │   ├── gutil_reflect.go
│   │   ├── gutil_slice.go
│   │   ├── gutil_struct.go
│   │   ├── gutil_try_catch.go
│   │   ├── gutil_z_bench_test.go
│   │   ├── gutil_z_example_test.go
│   │   ├── gutil_z_unit_comparator_test.go
│   │   ├── gutil_z_unit_copy_test.go
│   │   ├── gutil_z_unit_dump_test.go
│   │   ├── gutil_z_unit_goroutine_test.go
│   │   ├── gutil_z_unit_is_test.go
│   │   ├── gutil_z_unit_list_test.go
│   │   ├── gutil_z_unit_map_test.go
│   │   ├── gutil_z_unit_reflect_test.go
│   │   ├── gutil_z_unit_slice_test.go
│   │   ├── gutil_z_unit_struct_test.go
│   │   └── gutil_z_unit_test.go
│   └── gvalid/
│       ├── gvalid.go
│       ├── gvalid_error.go
│       ├── gvalid_register.go
│       ├── gvalid_validator.go
│       ├── gvalid_validator_check_map.go
│       ├── gvalid_validator_check_struct.go
│       ├── gvalid_validator_check_value.go
│       ├── gvalid_validator_message.go
│       ├── gvalid_z_example_feature_rule_test.go
│       ├── gvalid_z_example_test.go
│       ├── gvalid_z_unit_feature_checkmap_test.go
│       ├── gvalid_z_unit_feature_checkstruct_test.go
│       ├── gvalid_z_unit_feature_ci_test.go
│       ├── gvalid_z_unit_feature_custom_error_test.go
│       ├── gvalid_z_unit_feature_custom_rule_test.go
│       ├── gvalid_z_unit_feature_i18n_test.go
│       ├── gvalid_z_unit_feature_meta_test.go
│       ├── gvalid_z_unit_feature_recursive_test.go
│       ├── gvalid_z_unit_feature_rule_test.go
│       ├── gvalid_z_unit_internal_test.go
│       ├── gvalid_z_unit_issue_test.go
│       ├── internal/
│       │   └── builtin/
│       │       ├── builtin.go
│       │       ├── builtin_after.go
│       │       ├── builtin_after_equal.go
│       │       ├── builtin_alpha.go
│       │       ├── builtin_alpha_dash.go
│       │       ├── builtin_alpha_num.go
│       │       ├── builtin_array.go
│       │       ├── builtin_bail.go
│       │       ├── builtin_bank_card.go
│       │       ├── builtin_before.go
│       │       ├── builtin_before_equal.go
│       │       ├── builtin_between.go
│       │       ├── builtin_boolean.go
│       │       ├── builtin_ci.go
│       │       ├── builtin_date.go
│       │       ├── builtin_date_format.go
│       │       ├── builtin_datetime.go
│       │       ├── builtin_different.go
│       │       ├── builtin_domain.go
│       │       ├── builtin_email.go
│       │       ├── builtin_enums.go
│       │       ├── builtin_eq.go
│       │       ├── builtin_float.go
│       │       ├── builtin_foreach.go
│       │       ├── builtin_gt.go
│       │       ├── builtin_gte.go
│       │       ├── builtin_in.go
│       │       ├── builtin_integer.go
│       │       ├── builtin_ip.go
│       │       ├── builtin_ipv4.go
│       │       ├── builtin_ipv6.go
│       │       ├── builtin_json.go
│       │       ├── builtin_length.go
│       │       ├── builtin_lowercase.go
│       │       ├── builtin_lt.go
│       │       ├── builtin_lte.go
│       │       ├── builtin_mac.go
│       │       ├── builtin_max.go
│       │       ├── builtin_max_length.go
│       │       ├── builtin_min.go
│       │       ├── builtin_min_length.go
│       │       ├── builtin_not_eq.go
│       │       ├── builtin_not_in.go
│       │       ├── builtin_not_regex.go
│       │       ├── builtin_numeric.go
│       │       ├── builtin_passport.go
│       │       ├── builtin_password.go
│       │       ├── builtin_password2.go
│       │       ├── builtin_password3.go
│       │       ├── builtin_phone.go
│       │       ├── builtin_phone_loose.go
│       │       ├── builtin_postcode.go
│       │       ├── builtin_qq.go
│       │       ├── builtin_regex.go
│       │       ├── builtin_required.go
│       │       ├── builtin_required_if.go
│       │       ├── builtin_required_if_all.go
│       │       ├── builtin_required_unless.go
│       │       ├── builtin_required_with.go
│       │       ├── builtin_required_with_all.go
│       │       ├── builtin_required_without.go
│       │       ├── builtin_required_without_all.go
│       │       ├── builtin_resident_id.go
│       │       ├── builtin_same.go
│       │       ├── builtin_size.go
│       │       ├── builtin_telephone.go
│       │       ├── builtin_uppercase.go
│       │       └── builtin_url.go
│       └── testdata/
│           └── i18n/
│               ├── cn/
│               │   └── validation.toml
│               └── en/
│                   └── validation.toml
└── version.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .codecov.yml
================================================
ignore:
  - "cmd"  # ignore cmd folders and all its contents

================================================
FILE: .gitattributes
================================================
*.js linguist-language=GO
*.css linguist-language=GO
*.html linguist-language=GO

================================================
FILE: .gitee/ISSUE_TEMPLATE
================================================
<!-- 为高效处理您的疑问,如果觉得是BUG类问题,请您务必提供可复现该问题的最小可运行代码! -->
<!-- 为高效处理您的疑问,如果觉得是BUG类问题,请您务必提供可复现该问题的最小可运行代码! -->
<!-- 为高效处理您的疑问,如果觉得是BUG类问题,请您务必提供可复现该问题的最小可运行代码! -->
<!-- 重要的事情说三遍! -->

### 1. 您当前使用的`Go`版本,及系统版本、系统架构?

<!-- 使用 `go version` 命令查看,期望的结果如:`go 1.12, linux/amd64` -->


### 2. 您当前使用的`GoFrame`框架版本?

<!-- 框架版本可以查看自己项目下的 `go.mod`,或者框架文件 `version.go` -->


### 3. 更新到最新的框架版本是否能够解决问题?

<!-- 务必检查是否相同问题已在新版本中已修复 -->


### 4. 问题描述?

<!--
请您尽可能地提供一份最短的,可复现问题的代码。
代码尽可能地完整,最好是可以直接编译运行。
-->



### 5. 您期望得到的结果?



### 6. 您实际得到的结果?





================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [gogf] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # custom


================================================
FILE: .github/ISSUE_TEMPLATE/00-bug.yml
================================================
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Bugs
description: GoFrame command, module, or anything else
title: "os/gtime: issue title"
labels:
  - bug

body:
  - type: markdown
    attributes:
      value: |
        Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your problem.
        
        The issue title uses the format of the package name goes before the colon. Thanks!
        
        标题使用包名在冒号前的格式!谢谢! 

  - type: input
    id: go-version
    attributes:
      label: Go version
      description: |
        What version of Go are you using (`go version`)?
      placeholder: ex. go version go1.20.7 darwin/arm64
    validations:
      required: true

  - type: input
    id: gf-version
    attributes:
      label: GoFrame version
      description: |
        What version of GoFrame are you using (`gf version`)?
      placeholder: ex. 2.7.0
    validations:
      required: true

  - type: dropdown
    id: is-reproducible
    attributes:
      label: Can this bug be reproduced with the latest release?
      options:
        - Option Yes
        - Option No
    validations:
      required: true

  - type: textarea
    id: what-did-you-do
    attributes:
      label: "What did you do?"
      description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on [go.dev/play](https://go.dev/play) is best."
    validations:
      required: true

  - type: textarea
    id: actual-behavior
    attributes:
      label: "What did you see happen?"
      description: Command invocations and their associated output, functions with their arguments and return results, full stacktraces for panics (upload a file if it is very long), etc. Prefer copying text output over using screenshots.
    validations:
      required: true

  - type: textarea
    id: expected-behavior
    attributes:
      label: "What did you expect to see?"
      description: Why is the current output incorrect, and any additional context we may need to understand the issue.
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/01-enhance.yml
================================================
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Enhancements
description: Enhance an idea for this project
title: "os/gtime: issue title"
labels:
  - enhancement

body:
  - type: markdown
    attributes:
      value: |
        Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your problem.
        
        The issue title uses the format of the package name goes before the colon. Thanks!
        
        标题使用包名在冒号前的格式!谢谢! 

  - type: textarea
    id: description
    attributes:
      label: "Description"
      description: "Please describe your idea in detail."
    validations:
      required: true

  - type: textarea
    id: additional
    attributes:
      label: "Additional"
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/02-feature.yml
================================================
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Features
description: Suggest an idea for this project
title: "os/gtime: issue title"
labels:
  - feature

body:
  - type: markdown
    attributes:
      value: |
        Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your problem.
        
        The issue title uses the format of the package name goes before the colon. Thanks!
        
        标题使用包名在冒号前的格式!谢谢! 

  - type: dropdown
    id: is-problem
    attributes:
      label: Is your feature request related to a problem?
      options:
        - Option Yes
        - Option No
    validations:
      required: true

  - type: textarea
    id: description-solution
    attributes:
      label: "Describe the solution you'd like"
    validations:
      required: true

  - type: textarea
    id: description-considered
    attributes:
      label: "Describe alternatives you've considered"
    validations:
      required: true

  - type: textarea
    id: additional
    attributes:
      label: "Additional"
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/03-question.yml
================================================
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Questions
description: I want to ask a question
title: "os/gtime: issue title"
labels:
  - question

body:
  - type: markdown
    attributes:
      value: |
        Please read the document carefully. 请先仔细阅读文档
  
        The issue title uses the format of the package name goes before the colon. Thanks!

        标题使用包名在冒号前的格式!谢谢! 

  - type: textarea
    id: ask
    attributes:
      label: "What do you want to ask?"
      description: "Please describe the details of your questions. 请详细描述你的问题。"
    validations:
      required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.MD
================================================
**Please ensure you adhere to every item in this list.**
+ The PR title is formatted as follows: `<type>[optional scope]: <description>` For example, `fix(os/gtime): fix time zone issue`
  + `<type>` is mandatory and can be one of `fix`, `feat`, `build`, `ci`, `docs`, `style`, `refactor`, `perf`, `test`, `chore`
    + `fix`: Used when a bug has been fixed.
    + `feat`: Used when a new feature has been added.
    + `build`: Used for modifications to the project build system, such as changes to dependencies, external interfaces, or upgrading Node version.
    + `ci`: Used for modifications to continuous integration processes, such as changes to Travis, Jenkins workflow configurations.
    + `docs`: Used for modifications to documentation, such as changes to README files, API documentation, etc.
    + `style`: Used for changes to code style, such as adjustments to indentation, spaces, blank lines, etc.
    + `refactor`: Used for code refactoring, such as changes to code structure, variable names, function names, without altering functionality.
    + `perf`: Used for performance optimization, such as improving code performance, reducing memory usage, etc.
    + `test`: Used for modifications to test cases, such as adding, deleting, or modifying test cases for code.
    + `chore`: Used for modifications to non-business-related code, such as changes to build processes or tool configurations.
  + After `<type>`, specify the affected package name or scope in parentheses, for example, `(os/gtime)`.
  + The part after the colon uses the verb tense + phrase that completes the blank in
  + Lowercase verb after the colon
  + No trailing period
  + Keep the title as short as possible. ideally under 76 characters or shorter
  + [Reference Documentation](https://www.conventionalcommits.org/en/v1.0.0/)
+ If there is a corresponding issue, add either `Fixes #1234` or `Updates #1234`
  (the latter if this is not a complete fix) to this comment
+ Delete these instructions once you have read and applied them

**提交前请遵守每个事项,感谢!**
+ PR 标题格式如下:`<类型>[可选 范围]: <描述>` 例如 `fix(os/gtime): fix time zone issue`
  + `<类型>`是必须的,可以是 `fix`、`feat`、`build`、`ci`、`docs`、`style`、`refactor`、`perf`、`test`、`chore` 中的一个
    + fix: 用于修复了一个 bug
    + feat: 用于新增了一个功能
    + build: 用于修改项目构建系统,例如修改依赖库、外部接口或者升级 Node 版本等
    + ci: 用于修改持续集成流程,例如修改 Travis、Jenkins 等工作流配置
    + docs: 用于修改文档,例如修改 README 文件、API 文档等
    + style: 用于修改代码的样式,例如调整缩进、空格、空行等
    + refactor: 用于重构代码,例如修改代码结构、变量名、函数名等但不修改功能逻辑
    + perf: 用于优化性能,例如提升代码的性能、减少内存占用等
    + test: 用于修改测试用例,例如添加、删除、修改代码的测试用例等
    + chore: 用于对非业务性代码进行修改,例如修改构建流程或者工具配置等
  + `<类型>`后在括号中填写受影响的包名或范围,例如 `(os/gtime)`
  + 冒号后使用动词时态 + 短语
  + 冒号后的动词小写
  + 不要有结尾句号
  + 标题尽量保持简短,最好在 76 个字符或更短
  + [参考文档](https://www.conventionalcommits.org/zh-hans/v1.0.0/)
+ 如果有对应的 issue,请在此评论中添加 `Fixes #1234`,如果不是完全修复则添加 `Updates #1234`
+ 应用这些规则后删除所有的说明


================================================
FILE: .github/workflows/apollo/docker-compose.yml
================================================
version: '2'

services:
  apollo-quick-start:
    image: "loads/apollo-quick-start:latest"
    container_name: apollo-quick-start
    depends_on:
      - apollo-db
    ports:
      - "8080:8080"
      - "8070:8070"
      - "8060:8060"
    links:
      - apollo-db
    #environment:
      #JAVA_OPTS: '-Xms100m -Xmx1000m -Xmn100m -Xss256k -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=250m'
      #APOLLO_CONFIG_DB_USERNAME: 'root'
      #APOLLO_CONFIG_DB_PASSWORD: 'apollo'
      #APOLLO_PORTAL_DB_USERNAME: 'root'
      #APOLLO_PORTAL_DB_PASSWORD: 'apollo'

  apollo-db:
    image: "mysql:5.7"
    container_name: apollo-db
    environment:
      TZ: Asia/Shanghai
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      #MYSQL_ROOT_PASSWORD: 'apollo'
    depends_on:
      - apollo-dbdata
    ports:
      - "13306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
    volumes_from:
      - apollo-dbdata

  apollo-dbdata:
    image: "alpine:3.8"
    container_name: apollo-dbdata
    volumes:
      - /var/lib/mysql


================================================
FILE: .github/workflows/apollo/sql/apolloconfigdb.sql
================================================
--
-- Copyright 2022 Apollo Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

# Create Database
# ------------------------------------------------------------
CREATE DATABASE IF NOT EXISTS ApolloConfigDB DEFAULT CHARACTER SET = utf8mb4;

Use ApolloConfigDB;

# Dump of table app
# ------------------------------------------------------------

DROP TABLE IF EXISTS `App`;

CREATE TABLE `App` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',
  `OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',
  `OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',
  `OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',
  `OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_DeletedAt` (`AppId`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_Name` (`Name`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用表';



# Dump of table appnamespace
# ------------------------------------------------------------

DROP TABLE IF EXISTS `AppNamespace`;

CREATE TABLE `AppNamespace` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `Name` varchar(32) NOT NULL DEFAULT '' COMMENT 'namespace名字,注意,需要全局唯一',
  `AppId` varchar(64) NOT NULL DEFAULT '' COMMENT 'app id',
  `Format` varchar(32) NOT NULL DEFAULT 'properties' COMMENT 'namespace的format类型',
  `IsPublic` bit(1) NOT NULL DEFAULT b'0' COMMENT 'namespace是否为公共',
  `Comment` varchar(64) NOT NULL DEFAULT '' COMMENT '注释',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_Name_DeletedAt` (`AppId`,`Name`,`DeletedAt`),
  KEY `Name_AppId` (`Name`,`AppId`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用namespace定义';



# Dump of table audit
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Audit`;

CREATE TABLE `Audit` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `EntityName` varchar(50) NOT NULL DEFAULT 'default' COMMENT '表名',
  `EntityId` int(10) unsigned DEFAULT NULL COMMENT '记录ID',
  `OpName` varchar(50) NOT NULL DEFAULT 'default' COMMENT '操作类型',
  `Comment` varchar(500) DEFAULT NULL COMMENT '备注',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志审计表';



# Dump of table cluster
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Cluster`;

CREATE TABLE `Cluster` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `Name` varchar(32) NOT NULL DEFAULT '' COMMENT '集群名字',
  `AppId` varchar(64) NOT NULL DEFAULT '' COMMENT 'App id',
  `ParentClusterId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父cluster',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_Name_DeletedAt` (`AppId`,`Name`,`DeletedAt`),
  KEY `IX_ParentClusterId` (`ParentClusterId`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='集群';



# Dump of table commit
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Commit`;

CREATE TABLE `Commit` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `ChangeSets` longtext NOT NULL COMMENT '修改变更集',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `ClusterName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',
  `NamespaceName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'namespaceName',
  `Comment` varchar(500) DEFAULT NULL COMMENT '备注',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `AppId` (`AppId`(191)),
  KEY `ClusterName` (`ClusterName`(191)),
  KEY `NamespaceName` (`NamespaceName`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='commit 历史表';

# Dump of table grayreleaserule
# ------------------------------------------------------------

DROP TABLE IF EXISTS `GrayReleaseRule`;

CREATE TABLE `GrayReleaseRule` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `AppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `ClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Cluster Name',
  `NamespaceName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Namespace Name',
  `BranchName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'branch name',
  `Rules` varchar(16000) DEFAULT '[]' COMMENT '灰度规则',
  `ReleaseId` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '灰度对应的release',
  `BranchStatus` tinyint(2) DEFAULT '1' COMMENT '灰度分支状态: 0:删除分支,1:正在使用的规则 2:全量发布',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_Namespace` (`AppId`,`ClusterName`,`NamespaceName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='灰度规则表';


# Dump of table instance
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Instance`;

CREATE TABLE `Instance` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `AppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `ClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',
  `DataCenter` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'Data Center Name',
  `Ip` varchar(32) NOT NULL DEFAULT '' COMMENT 'instance ip',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `IX_UNIQUE_KEY` (`AppId`,`ClusterName`,`Ip`,`DataCenter`),
  KEY `IX_IP` (`Ip`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='使用配置的应用实例';



# Dump of table instanceconfig
# ------------------------------------------------------------

DROP TABLE IF EXISTS `InstanceConfig`;

CREATE TABLE `InstanceConfig` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `InstanceId` int(11) unsigned DEFAULT NULL COMMENT 'Instance Id',
  `ConfigAppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'Config App Id',
  `ConfigClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Config Cluster Name',
  `ConfigNamespaceName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Config Namespace Name',
  `ReleaseKey` varchar(64) NOT NULL DEFAULT '' COMMENT '发布的Key',
  `ReleaseDeliveryTime` timestamp NULL DEFAULT NULL COMMENT '配置获取时间',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `IX_UNIQUE_KEY` (`InstanceId`,`ConfigAppId`,`ConfigNamespaceName`),
  KEY `IX_ReleaseKey` (`ReleaseKey`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_Valid_Namespace` (`ConfigAppId`,`ConfigClusterName`,`ConfigNamespaceName`,`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用实例的配置信息';



# Dump of table item
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Item`;

CREATE TABLE `Item` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `NamespaceId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '集群NamespaceId',
  `Key` varchar(128) NOT NULL DEFAULT 'default' COMMENT '配置项Key',
  `Value` longtext NOT NULL COMMENT '配置项值',
  `Comment` varchar(1024) DEFAULT '' COMMENT '注释',
  `LineNum` int(10) unsigned DEFAULT '0' COMMENT '行号',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `IX_GroupId` (`NamespaceId`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置项目';



# Dump of table namespace
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Namespace`;

CREATE TABLE `Namespace` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `ClusterName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'Cluster Name',
  `NamespaceName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'Namespace Name',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_ClusterName_NamespaceName_DeletedAt` (`AppId`(191),`ClusterName`(191),`NamespaceName`(191),`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_NamespaceName` (`NamespaceName`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='命名空间';



# Dump of table namespacelock
# ------------------------------------------------------------

DROP TABLE IF EXISTS `NamespaceLock`;

CREATE TABLE `NamespaceLock` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `NamespaceId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '集群NamespaceId',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  `IsDeleted` bit(1) DEFAULT b'0' COMMENT '软删除',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_NamespaceId_DeletedAt` (`NamespaceId`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='namespace的编辑锁';



# Dump of table release
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Release`;

CREATE TABLE `Release` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `ReleaseKey` varchar(64) NOT NULL DEFAULT '' COMMENT '发布的Key',
  `Name` varchar(64) NOT NULL DEFAULT 'default' COMMENT '发布名字',
  `Comment` varchar(256) DEFAULT NULL COMMENT '发布说明',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `ClusterName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',
  `NamespaceName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'namespaceName',
  `Configurations` longtext NOT NULL COMMENT '发布配置',
  `IsAbandoned` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否废弃',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_ReleaseKey_DeletedAt` (`ReleaseKey`,`DeletedAt`),
  KEY `AppId_ClusterName_GroupName` (`AppId`(191),`ClusterName`(191),`NamespaceName`(191)),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布';


# Dump of table releasehistory
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ReleaseHistory`;

CREATE TABLE `ReleaseHistory` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `AppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `ClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',
  `NamespaceName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'namespaceName',
  `BranchName` varchar(32) NOT NULL DEFAULT 'default' COMMENT '发布分支名',
  `ReleaseId` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联的Release Id',
  `PreviousReleaseId` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '前一次发布的ReleaseId',
  `Operation` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '发布类型,0: 普通发布,1: 回滚,2: 灰度发布,3: 灰度规则更新,4: 灰度合并回主分支发布,5: 主分支发布灰度自动发布,6: 主分支回滚灰度自动发布,7: 放弃灰度',
  `OperationContext` longtext NOT NULL COMMENT '发布上下文信息',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `IX_Namespace` (`AppId`,`ClusterName`,`NamespaceName`,`BranchName`),
  KEY `IX_ReleaseId` (`ReleaseId`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布历史';


# Dump of table releasemessage
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ReleaseMessage`;

CREATE TABLE `ReleaseMessage` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `Message` varchar(1024) NOT NULL DEFAULT '' COMMENT '发布的消息内容',
  `DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_Message` (`Message`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布消息';



# Dump of table serverconfig
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ServerConfig`;

CREATE TABLE `ServerConfig` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `Key` varchar(64) NOT NULL DEFAULT 'default' COMMENT '配置项Key',
  `Cluster` varchar(32) NOT NULL DEFAULT 'default' COMMENT '配置对应的集群,default为不针对特定的集群',
  `Value` varchar(2048) NOT NULL DEFAULT 'default' COMMENT '配置项值',
  `Comment` varchar(1024) DEFAULT '' COMMENT '注释',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_Key_Cluster_DeletedAt` (`Key`,`Cluster`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置服务自身配置';

# Dump of table accesskey
# ------------------------------------------------------------

DROP TABLE IF EXISTS `AccessKey`;

CREATE TABLE `AccessKey` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Secret` varchar(128) NOT NULL DEFAULT '' COMMENT 'Secret',
  `IsEnabled` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: enabled, 0: disabled',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_Secret_DeletedAt` (`AppId`,`Secret`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='访问密钥';

# Config
# ------------------------------------------------------------
INSERT INTO `ServerConfig` (`Key`, `Cluster`, `Value`, `Comment`)
VALUES
    ('eureka.service.url', 'default', 'http://localhost:8080/eureka/', 'Eureka服务Url,多个service以英文逗号分隔'),
    ('namespace.lock.switch', 'default', 'false', '一次发布只能有一个人修改开关'),
    ('item.value.length.limit', 'default', '20000', 'item value最大长度限制'),
    ('config-service.cache.enabled', 'default', 'false', 'ConfigService是否开启缓存,开启后能提高性能,但是会增大内存消耗!'),
    ('item.key.length.limit', 'default', '128', 'item key 最大长度限制');

# Sample Data
# ------------------------------------------------------------
INSERT INTO `App` (`AppId`, `Name`, `OrgId`, `OrgName`, `OwnerName`, `OwnerEmail`)
VALUES
  ('SampleApp', 'Sample App', 'TEST1', '样例部门1', 'apollo', 'apollo@acme.com');

INSERT INTO `AppNamespace` (`Name`, `AppId`, `Format`, `IsPublic`, `Comment`)
VALUES
  ('application', 'SampleApp', 'properties', 0, 'default app namespace');

INSERT INTO `Cluster` (`Name`, `AppId`)
VALUES
  ('default', 'SampleApp');

INSERT INTO `Namespace` (`Id`, `AppId`, `ClusterName`, `NamespaceName`)
VALUES
  (1, 'SampleApp', 'default', 'application');


INSERT INTO `Item` VALUES (1,1,'timeout','100','sample timeout配置',1,_binary '\0',0,'default','2022-09-28 15:43:17','','2022-09-28 15:43:17'),
                          (2,1,'','','',2,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (3,1,'server.address',':8000','',3,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (4,1,'server.dumpRouterMap','true','',4,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (5,1,'server.routeOverWrite','true','',5,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (6,1,'server.accessLogEnabled','true','',6,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (7,1,'server.openapiPath','/api.json','',7,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (8,1,'server.swaggerPath','/swagger','',8,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (9,1,'','','',9,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (10,1,'','','# Global logging.',10,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (11,1,'logger.level','all','',11,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55'),
                          (12,1,'logger.stdout','true','',12,_binary '\0',0,'apollo','2022-09-28 15:47:55','apollo','2022-09-28 15:47:55');

INSERT INTO `Release` VALUES (1,'20161009155425-d3a0749c6e20bc15','20161009155424-release','Sample发布','SampleApp','default','application','{\"timeout\":\"100\"}',_binary '\0',_binary '\0',0,'default','2022-09-28 15:59:38','','2022-09-28 15:59:38'),
                             (2,'20220929000151-1dc5634459e19171','20220929000148-release','','SampleApp','default','application','{\"timeout\":\"100\",\"server.address\":\":8000\",\"server.dumpRouterMap\":\"true\",\"server.routeOverWrite\":\"true\",\"server.accessLogEnabled\":\"true\",\"server.openapiPath\":\"/api.json\",\"server.swaggerPath\":\"/swagger\",\"logger.level\":\"all\",\"logger.stdout\":\"true\"}',_binary '\0',_binary '\0',0,'apollo','2022-09-28 16:01:51','apollo','2022-09-28 16:01:51');

INSERT INTO `ReleaseHistory` VALUES (1,'SampleApp','default','application','default',1,0,0,'{}',_binary '\0',0,'apollo','2022-09-28 15:59:38','apollo','2022-09-28 15:59:38'),
                                    (2,'SampleApp','default','application','default',2,1,0,'{\"isEmergencyPublish\":false}',_binary '\0',0,'apollo','2022-09-28 16:01:51','apollo','2022-09-28 16:01:51');

INSERT INTO `ReleaseMessage` VALUES (1,'SampleApp+default+application','2022-09-28 15:59:38'),
                                    (2,'SampleApp+default+application','2022-09-28 16:01:51');

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


================================================
FILE: .github/workflows/apollo/sql/apolloportaldb.sql
================================================
--
-- Copyright 2022 Apollo Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

# Create Database
# ------------------------------------------------------------
CREATE DATABASE IF NOT EXISTS ApolloPortalDB DEFAULT CHARACTER SET = utf8mb4;

Use ApolloPortalDB;

# Dump of table app
# ------------------------------------------------------------

DROP TABLE IF EXISTS `App`;

CREATE TABLE `App` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',
  `OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',
  `OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',
  `OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',
  `OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_DeletedAt` (`AppId`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_Name` (`Name`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用表';



# Dump of table appnamespace
# ------------------------------------------------------------

DROP TABLE IF EXISTS `AppNamespace`;

CREATE TABLE `AppNamespace` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `Name` varchar(32) NOT NULL DEFAULT '' COMMENT 'namespace名字,注意,需要全局唯一',
  `AppId` varchar(64) NOT NULL DEFAULT '' COMMENT 'app id',
  `Format` varchar(32) NOT NULL DEFAULT 'properties' COMMENT 'namespace的format类型',
  `IsPublic` bit(1) NOT NULL DEFAULT b'0' COMMENT 'namespace是否为公共',
  `Comment` varchar(64) NOT NULL DEFAULT '' COMMENT '注释',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_Name_DeletedAt` (`AppId`,`Name`,`DeletedAt`),
  KEY `Name_AppId` (`Name`,`AppId`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用namespace定义';



# Dump of table consumer
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Consumer`;

CREATE TABLE `Consumer` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',
  `OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',
  `OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',
  `OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',
  `OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_AppId_DeletedAt` (`AppId`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放API消费者';



# Dump of table consumeraudit
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ConsumerAudit`;

CREATE TABLE `ConsumerAudit` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `ConsumerId` int(11) unsigned DEFAULT NULL COMMENT 'Consumer Id',
  `Uri` varchar(1024) NOT NULL DEFAULT '' COMMENT '访问的Uri',
  `Method` varchar(16) NOT NULL DEFAULT '' COMMENT '访问的Method',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_ConsumerId` (`ConsumerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='consumer审计表';



# Dump of table consumerrole
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ConsumerRole`;

CREATE TABLE `ConsumerRole` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `ConsumerId` int(11) unsigned DEFAULT NULL COMMENT 'Consumer Id',
  `RoleId` int(10) unsigned DEFAULT NULL COMMENT 'Role Id',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_ConsumerId_RoleId_DeletedAt` (`ConsumerId`,`RoleId`,`DeletedAt`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_RoleId` (`RoleId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='consumer和role的绑定表';



# Dump of table consumertoken
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ConsumerToken`;

CREATE TABLE `ConsumerToken` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `ConsumerId` int(11) unsigned DEFAULT NULL COMMENT 'ConsumerId',
  `Token` varchar(128) NOT NULL DEFAULT '' COMMENT 'token',
  `Expires` datetime NOT NULL DEFAULT '2099-01-01 00:00:00' COMMENT 'token失效时间',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_Token_DeletedAt` (`Token`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='consumer token表';

# Dump of table favorite
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Favorite`;

CREATE TABLE `Favorite` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `UserId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '收藏的用户',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Position` int(32) NOT NULL DEFAULT '10000' COMMENT '收藏顺序',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_UserId_AppId_DeletedAt` (`UserId`,`AppId`,`DeletedAt`),
  KEY `AppId` (`AppId`(191)),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COMMENT='应用收藏表';

# Dump of table permission
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Permission`;

CREATE TABLE `Permission` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `PermissionType` varchar(32) NOT NULL DEFAULT '' COMMENT '权限类型',
  `TargetId` varchar(256) NOT NULL DEFAULT '' COMMENT '权限对象类型',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_TargetId_PermissionType_DeletedAt` (`TargetId`,`PermissionType`,`DeletedAt`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='permission表';



# Dump of table role
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Role`;

CREATE TABLE `Role` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `RoleName` varchar(256) NOT NULL DEFAULT '' COMMENT 'Role name',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_RoleName_DeletedAt` (`RoleName`,`DeletedAt`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';



# Dump of table rolepermission
# ------------------------------------------------------------

DROP TABLE IF EXISTS `RolePermission`;

CREATE TABLE `RolePermission` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `RoleId` int(10) unsigned DEFAULT NULL COMMENT 'Role Id',
  `PermissionId` int(10) unsigned DEFAULT NULL COMMENT 'Permission Id',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_RoleId_PermissionId_DeletedAt` (`RoleId`,`PermissionId`,`DeletedAt`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_PermissionId` (`PermissionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和权限的绑定表';



# Dump of table serverconfig
# ------------------------------------------------------------

DROP TABLE IF EXISTS `ServerConfig`;

CREATE TABLE `ServerConfig` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `Key` varchar(64) NOT NULL DEFAULT 'default' COMMENT '配置项Key',
  `Value` varchar(2048) NOT NULL DEFAULT 'default' COMMENT '配置项值',
  `Comment` varchar(1024) DEFAULT '' COMMENT '注释',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_Key_DeletedAt` (`Key`,`DeletedAt`),
  KEY `DataChange_LastTime` (`DataChange_LastTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置服务自身配置';



# Dump of table userrole
# ------------------------------------------------------------

DROP TABLE IF EXISTS `UserRole`;

CREATE TABLE `UserRole` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `UserId` varchar(128) DEFAULT '' COMMENT '用户身份标识',
  `RoleId` int(10) unsigned DEFAULT NULL COMMENT 'Role Id',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',
  `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_UserId_RoleId_DeletedAt` (`UserId`,`RoleId`,`DeletedAt`),
  KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_RoleId` (`RoleId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和role的绑定表';

# Dump of table Users
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Users`;

CREATE TABLE `Users` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `Username` varchar(64) NOT NULL DEFAULT 'default' COMMENT '用户登录账户',
  `Password` varchar(512) NOT NULL DEFAULT 'default' COMMENT '密码',
  `UserDisplayName` varchar(512) NOT NULL DEFAULT 'default' COMMENT '用户名称',
  `Email` varchar(64) NOT NULL DEFAULT 'default' COMMENT '邮箱地址',
  `Enabled` tinyint(4) DEFAULT NULL COMMENT '是否有效',
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UK_Username` (`Username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';


# Dump of table Authorities
# ------------------------------------------------------------

DROP TABLE IF EXISTS `Authorities`;

CREATE TABLE `Authorities` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
  `Username` varchar(64) NOT NULL,
  `Authority` varchar(50) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


# Config
# ------------------------------------------------------------
INSERT INTO `ServerConfig` (`Key`, `Value`, `Comment`)
VALUES
    ('apollo.portal.envs', 'dev', '可支持的环境列表'),
    ('organizations', '[{\"orgId\":\"TEST1\",\"orgName\":\"样例部门1\"},{\"orgId\":\"TEST2\",\"orgName\":\"样例部门2\"}]', '部门列表'),
    ('superAdmin', 'apollo', 'Portal超级管理员'),
    ('api.readTimeout', '10000', 'http接口read timeout'),
    ('consumer.token.salt', 'someSalt', 'consumer token salt'),
    ('admin.createPrivateNamespace.switch', 'true', '是否允许项目管理员创建私有namespace'),
    ('configView.memberOnly.envs', 'dev', '只对项目成员显示配置信息的环境列表,多个env以英文逗号分隔'),
    ('apollo.portal.meta.servers', '{}', '各环境Meta Service列表');

INSERT INTO `Users` (`Username`, `Password`, `UserDisplayName`, `Email`, `Enabled`)
VALUES
    ('apollo', '$2a$10$7r20uS.BQ9uBpf3Baj3uQOZvMVvB1RN3PYoKE94gtz2.WAOuiiwXS', 'apollo', 'apollo@acme.com', 1);

INSERT INTO `Authorities` (`Username`, `Authority`) VALUES ('apollo', 'ROLE_user');

# Sample Data
# ------------------------------------------------------------
INSERT INTO `App` (`AppId`, `Name`, `OrgId`, `OrgName`, `OwnerName`, `OwnerEmail`)
VALUES
  ('SampleApp', 'Sample App', 'TEST1', '样例部门1', 'apollo', 'apollo@acme.com');

INSERT INTO `AppNamespace` (`Name`, `AppId`, `Format`, `IsPublic`, `Comment`)
VALUES
  ('application', 'SampleApp', 'properties', 0, 'default app namespace');

INSERT INTO `Permission` (`Id`, `PermissionType`, `TargetId`)
VALUES
  (1, 'CreateCluster', 'SampleApp'),
  (2, 'CreateNamespace', 'SampleApp'),
  (3, 'AssignRole', 'SampleApp'),
  (4, 'ModifyNamespace', 'SampleApp+application'),
  (5, 'ReleaseNamespace', 'SampleApp+application');

INSERT INTO `Role` (`Id`, `RoleName`)
VALUES
  (1, 'Master+SampleApp'),
  (2, 'ModifyNamespace+SampleApp+application'),
  (3, 'ReleaseNamespace+SampleApp+application');

INSERT INTO `RolePermission` (`RoleId`, `PermissionId`)
VALUES
  (1, 1),
  (1, 2),
  (1, 3),
  (2, 4),
  (3, 5);

INSERT INTO `UserRole` (`UserId`, `RoleId`)
VALUES
  ('apollo', 1),
  ('apollo', 2),
  ('apollo', 3);

-- spring session (https://github.com/spring-projects/spring-session/blob/faee8f1bdb8822a5653a81eba838dddf224d92d6/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc/schema-mysql.sql)
CREATE TABLE SPRING_SESSION (
  PRIMARY_ID CHAR(36) NOT NULL,
  SESSION_ID CHAR(36) NOT NULL,
  CREATION_TIME BIGINT NOT NULL,
  LAST_ACCESS_TIME BIGINT NOT NULL,
  MAX_INACTIVE_INTERVAL INT NOT NULL,
  EXPIRY_TIME BIGINT NOT NULL,
  PRINCIPAL_NAME VARCHAR(100),
  CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE SPRING_SESSION_ATTRIBUTES (
  SESSION_PRIMARY_ID CHAR(36) NOT NULL,
  ATTRIBUTE_NAME VARCHAR(200) NOT NULL,
  ATTRIBUTE_BYTES BLOB NOT NULL,
  CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
  CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


================================================
FILE: .github/workflows/ci-main.yml
================================================
# The main codes build and unit testing running workflow.
name: GoFrame Main CI


on:
  push:
    branches:
    - master
    - develop
    - personal/**
    - feature/**
    - enhance/**
    - fix/**

  pull_request:
    branches:
    - master
    - develop
    - personal/**
    - feature/**
    - enhance/**
    - fix/**
  workflow_dispatch:
    inputs:
      debug:
        type: boolean
        description: 'Enable tmate Debug'
        required: false
        default: false

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

env:
  TZ: "Asia/Shanghai"
  # for unit testing cases of some components that only execute on the latest go version.
  LATEST_GO_VERSION: "1.25"

jobs:
  code-test:
    strategy:
      matrix:
        # 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
        # When adding new go version to the list, make sure:
        # 1. Update the `LATEST_GO_VERSION` env variable.
        # 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
        go-version: [ "1.23", "1.24", "1.25" ]
        goarch: [ "386", "amd64" ]

    runs-on: ubuntu-latest

    # Service containers to run with `code-test`
    services:
      # Etcd service.
      # docker run -p 2379:2379 -e ALLOW_NONE_AUTHENTICATION=yes bitnamilegacy/etcd:3.4.24
      etcd:
        image: bitnamilegacy/etcd:3.4.24
        env:
          ALLOW_NONE_AUTHENTICATION: yes
        ports:
          - 2379:2379

      # Redis backend server.
      redis:
        image  : redis:7.0
        options: >-
          --health-cmd      "redis-cli ping"
          --health-interval 10s
          --health-timeout  5s
          --health-retries  5
        ports:
          # Maps tcp port 6379 on service container to the host
          - 6379:6379

      # MySQL backend server.
      # docker run \
      # -p 3306:3306 \
      # -e MYSQL_DATABASE=test \
      # -e MYSQL_ROOT_PASSWORD=12345678 \
      # mysql:5.7
      mysql:
        image: mysql:5.7
        env:
          MYSQL_DATABASE     : test
          MYSQL_ROOT_PASSWORD: 12345678
        ports:
          - 3306:3306

      # MariaDb backend server.
      # docker run \
      # -p 3307:3306 \
      # -e MYSQL_DATABASE=test \
      # -e MYSQL_ROOT_PASSWORD=12345678 \
      # mariadb:11.4
      mariadb:
        image: mariadb:11.4
        env:
          MARIADB_DATABASE: test
          MARIADB_ROOT_PASSWORD: 12345678
        ports:
          - 3307:3306

      # PostgreSQL backend server.
      # docker run \
      # -p 5432:5432 \
      # -e POSTGRES_PASSWORD=12345678 \
      # -e POSTGRES_USER=postgres \
      # -e POSTGRES_DB=test \
      # -v postgres:/Users/john/Temp/postgresql/data \
      # postgres:17-alpine
      postgres:
        image: postgres:17-alpine
        env:
          POSTGRES_PASSWORD: 12345678
          POSTGRES_USER:     postgres
          POSTGRES_DB:       test
          TZ:                Asia/Shanghai
        ports:
          - 5432:5432
        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

      # MSSQL backend server.
      # docker run \
      # -p 1433:1433 \
      # -e ACCEPT_EULA=Y \
      # -e SA_PASSWORD=LoremIpsum86 \
      # -e MSSQL_USER=root \
      # -e MSSQL_PASSWORD=LoremIpsum86 \
      # mcr.microsoft.com/mssql/server:2022-latest
      mssql:
        image: mcr.microsoft.com/mssql/server:2022-latest
        env:
          TZ: Asia/Shanghai
          ACCEPT_EULA: Y
          MSSQL_SA_PASSWORD: LoremIpsum86
        ports:
          - 1433:1433
        options: >-
          --health-cmd="/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P ${MSSQL_SA_PASSWORD} -N -C -l 30 -Q \"SELECT 1\" || exit 1"
          --health-start-period 10s
          --health-interval 10s
          --health-timeout 5s
          --health-retries 10

      # ClickHouse backend server.
      # docker run \
      # -p 9000:9000 -p 8123:8123 -p 9001:9001 \
      # clickhouse/clickhouse-server:24.11.1.2557-alpine
      clickhouse-server:
        image: clickhouse/clickhouse-server:24.11.1.2557-alpine
        ports:
          - 9000:9000
          - 8123:8123
          - 9001:9001

      # Polaris backend server.
      # docker run \
      # -p 8090:8090 -p 8091:8091 -p 8093:8093 -p 9090:9090 -p 9091:9091 \
      # polarismesh/polaris-standalone:v1.17.2
      polaris:
        image: polarismesh/polaris-standalone:v1.17.2
        ports:
          - 8090:8090
          - 8091:8091
          - 8093:8093
          - 9090:9090
          - 9091:9091

      # Oracle 11g server.
      # docker run \
      # -e ORACLE_ALLOW_REMOTE=true \
      # -e ORACLE_SID=XE \
      # -e ORACLE_DB_USER_NAME=system \
      # -e ORACLE_DB_PASSWORD=oracle \
      # -p 1521:1521 \
      # loads/oracle-xe-11g-r2:11.2.0
      oracle-server:
        image: loads/oracle-xe-11g-r2:11.2.0
        env:
          ORACLE_ALLOW_REMOTE: true
          ORACLE_SID: XE
          ORACLE_DB_USER_NAME: system
          ORACLE_DB_PASSWORD: oracle
        ports:
          - 1521:1521

      # dm8 server
      # docker run -p 5236:5236 loads/dm:v8.1.2.128_ent_x86_64_ctm_pack4
      dm-server:
        image: loads/dm:v8.1.2.128_ent_x86_64_ctm_pack4
        ports:
          - 5236:5236

      # openGauss server
      # docker run --privileged=true -e GS_PASSWORD=UTpass@1234 -p 9950:5432 opengauss/opengauss:7.0.0-RC1.B023
      gaussdb:
        image: opengauss/opengauss:7.0.0-RC1.B023
        env:
          GS_PASSWORD: UTpass@1234
          TZ: Asia/Shanghai
        ports:
          - 9950:5432


      zookeeper:
        image: zookeeper:3.8
        ports:
          - 2181:2181

    steps:
    # TODO: szenius/set-timezone update to node16
    # sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    - name: Setup Timezone
      uses: szenius/set-timezone@v2.0
      with:
        timezoneLinux: "Asia/Shanghai"

    - name: Checkout Repository
      uses: actions/checkout@v5

    - name: Setup tmate Session
      uses: mxschmitt/action-tmate@v3
      if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug }}
      with:
        detached: true
        limit-access-to-actor: false

    - name: Free Disk Space
      run: |
        df -h /
        sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/hostedtoolcache/CodeQL /opt/hostedtoolcache/Python || true
        df -h /

    - name: Start Apollo Containers
      run:  docker compose -f ".github/workflows/apollo/docker-compose.yml" up -d --build
      
    - name: Start Nacos Containers
      run:  docker compose -f ".github/workflows/nacos/docker-compose.yml" up -d --build

    - name: Start Redis Cluster Containers
      run:  docker compose -f ".github/workflows/redis/docker-compose.yml" up -d --build

    - name: Start Consul Containers
      run:  docker compose -f ".github/workflows/consul/docker-compose.yml" up -d --build

    - name: Setup Golang ${{ matrix.go-version }}
      uses: actions/setup-go@v5
      with:
        go-version: ${{ matrix.go-version }}
        cache-dependency-path: '**/go.sum'

    - name: Install Protoc
      uses: arduino/setup-protoc@v3
      with:
        version: "31.x"
        repo-token: ${{ secrets.GITHUB_TOKEN }}

    - name: Install the protocol compiler plugins for Go
      run: |
        go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
        go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
        export PATH="$PATH:$(go env GOPATH)/bin"

    - name: Before Script
      run:  bash .github/workflows/scripts/before_script.sh

    - name: Build & Test
      if: ${{ (github.event_name == 'push' && github.ref != 'refs/heads/master') || github.event_name == 'pull_request' }}
      run: bash .github/workflows/scripts/ci-main.sh

    - name: Build & Test & Coverage
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
      run: bash .github/workflows/scripts/ci-main.sh coverage

    - name: Stop Redis Cluster Containers
      run:  docker compose -f ".github/workflows/redis/docker-compose.yml" down

    - name: Stop Apollo Containers
      run:  docker compose -f ".github/workflows/apollo/docker-compose.yml" down

    - name: Stop Nacos Containers
      run:  docker compose -f ".github/workflows/nacos/docker-compose.yml" down

    - name: Stop Consul Containers
      run:  docker compose -f ".github/workflows/consul/docker-compose.yml" down

    - name: Report Coverage
      uses: codecov/codecov-action@v4
      # Only report coverage on the latest go version
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.go-version == env.LATEST_GO_VERSION }}
      with:
        flags: go-${{ matrix.go-version }}-${{ matrix.goarch }}
        token: ${{ secrets.CODECOV_TOKEN }}


================================================
FILE: .github/workflows/ci-sub.yml
================================================
# The sub codes build and unit testing running workflow.
# It maintains the ci of unimportant packages.
name: GoFrame Sub CI


on:
  push:
    branches:
    - master
    - develop
    - personal/**
    - feature/**
    - enhance/**
    - fix/**

  pull_request:
    branches:
    - master
    - develop
    - personal/**
    - feature/**
    - enhance/**
    - fix/**

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

env:
  TZ: "Asia/Shanghai"
  # for unit testing cases of some components that only execute on the latest go version.
  LATEST_GO_VERSION: "1.25"

jobs:
  code-test:
    strategy:
      matrix:
        # 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
        # When adding new go version to the list, make sure:
        # 1. Update the `LATEST_GO_VERSION` env variable.
        # 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
        go-version: [ "1.23", "1.24", "1.25" ]
        goarch: [ "386", "amd64" ]

    runs-on: ubuntu-latest

    steps:
    - name: Setup Timezone
      uses: szenius/set-timezone@v2.0
      with:
        timezoneLinux: "Asia/Shanghai"

    - name: Checkout Repository
      uses: actions/checkout@v5

    - name: Start Minikube
      uses: medyagh/setup-minikube@master

    - name: Setup Golang ${{ matrix.go-version }}
      uses: actions/setup-go@v5
      with:
        go-version: ${{ matrix.go-version }}
        cache-dependency-path: '**/go.sum' 

    - name: Before Script
      run:  bash .github/workflows/scripts/before_script.sh

    - name: Build & Test
      run: bash .github/workflows/scripts/ci-sub.sh




================================================
FILE: .github/workflows/codeql.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL Advanced"

on:
  push:
    branches: [ "master", "develop" ]
  pull_request:
    branches: [ "master", "develop" ]
  schedule:
    - cron: '0 21 * * *'

jobs:
  analyze:
    name: Analyze (${{ matrix.language }})
    # Runner size impacts CodeQL analysis time. To learn more, please see:
    #   - https://gh.io/recommended-hardware-resources-for-running-codeql
    #   - https://gh.io/supported-runners-and-hardware-resources
    #   - https://gh.io/using-larger-runners (GitHub.com only)
    # Consider using larger runners or machines with greater resources for possible analysis time improvements.
    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
    permissions:
      # required for all workflows
      security-events: write

      # required to fetch internal or private CodeQL packs
      packages: read

      # only required for workflows in private repositories
      actions: read
      contents: read

    strategy:
      fail-fast: false
      matrix:
        include:
        - language: actions
          build-mode: none
        - language: go
          build-mode: autobuild
        # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
        # Use `c-cpp` to analyze code written in C, C++ or both
        # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
        # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
        # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
        # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
        # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
        # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    # Add any setup steps before running the `github/codeql-action/init` action.
    # This includes steps like installing compilers or runtimes (`actions/setup-node`
    # or others). This is typically only required for manual builds.
    # - name: Setup runtime (example)
    #   uses: actions/setup-example@v1

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        build-mode: ${{ matrix.build-mode }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.

        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality

    # If the analyze step fails for one of the languages you are analyzing with
    # "We were unable to automatically build your code", modify the matrix above
    # to set the build mode to "manual" for that language. Then modify this step
    # to build your code.
    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
    - if: matrix.build-mode == 'manual'
      shell: bash
      run: |
        echo 'If you are using a "manual" build mode for one or more of the' \
          'languages you are analyzing, replace this with the commands to build' \
          'your code, for example:'
        echo '  make bootstrap'
        echo '  make release'
        exit 1

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
      with:
        category: "/language:${{matrix.language}}"


================================================
FILE: .github/workflows/consul/client.json
================================================
{
    "node_name": "consul-client",
    "data_dir": "/consul/data",
    "retry_join":[
        "consul-server"
     ]
}

================================================
FILE: .github/workflows/consul/docker-compose.yml
================================================
version: '3.7'

services:

  consul-server:
    image: consul:1.15
    container_name: consul-server
    restart: always
    volumes:
     - ./server.json:/consul/config/server.json:ro
    networks:
      - consul
    ports:
      - "8500:8500"
      - "8600:8600/tcp"
      - "8600:8600/udp"
    command: "agent"

  consul-client:
    image: consul:1.15
    container_name: consul-client
    restart: always
    volumes:
     - ./client.json:/consul/config/client.json:ro
    networks:
      - consul
    command: "agent"

networks:
  consul:
    driver: bridge

================================================
FILE: .github/workflows/consul/server.json
================================================
{
    "node_name": "consul-server",
    "server": true,
    "bootstrap" : true,
    "ui_config": {
        "enabled" : true
    },
    "data_dir": "/consul/data",
    "addresses": {
        "http" : "0.0.0.0"
    }
}

================================================
FILE: .github/workflows/format-code-on-push.yml
================================================
name: Format Code on Push

on:
  push

jobs:
  format-code:
    strategy:
      matrix:
        go-version: [ 'stable' ]
    name: format-code-by-gci
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v5
      - name: Setup Golang ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      - name: Install gci
        run: go install github.com/daixiang0/gci@latest
      - name: Run gci
        run: |
          gci write --custom-order \
          --skip-generated \
          --skip-vendor \
          -s standard \
          -s blank \
          -s default \
          -s dot \
          -s "prefix(github.com/gogf/gf/v2)" \
          -s "prefix(github.com/gogf/gf/cmd)" \
          -s "prefix(github.com/gogf/gf/contrib)" \
          -s "prefix(github.com/gogf/gf/example)" \
          ./
      - name: Check for changes
        run: |
          if [[ -n "$(git status --porcelain)" ]]; then
            echo "HAS_CHANGES=true" >> $GITHUB_ENV
          else
            echo "HAS_CHANGES=false" >> $GITHUB_ENV
          fi         
      - name: Configure Git
        run: |
          if [[ "$HAS_CHANGES" == 'true' ]]; then
            git config --global user.name "github-actions[bot]"
            git config --global user.email "github-actions[bot]@users.noreply.github.com"
          else
            echo "HAS_CHANGES= $HAS_CHANGES "
          fi
      - name: Commit and push changes
        run: |
          if [[ "$HAS_CHANGES" == 'true' ]]; then
            git add .
            git commit -m "Apply gci import order changes"
            git push origin ${{ github.event.pull_request.head.ref }}
          else
            echo "No change to commit push"
          fi
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

================================================
FILE: .github/workflows/gitee-sync.yml
================================================
on:
  push:
    branches:
      - master
    tags:
      - "*"

name: Sync to Gitee
jobs:
  run:
    name: Run
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source code
        uses: actions/checkout@v5
      - name: Mirror GitHub to Gitee
        uses: Yikun/hub-mirror-action@v1.4
        with:
          src: github/gogf
          dst: gitee/johng
          dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
          dst_token: ${{ secrets.GITEE_TOKEN }}
          src_account_type: org
          dst_account_type: user
          timeout: 600
          debug: true
          force_update: true
          static_list: "gf"

================================================
FILE: .github/workflows/golangci-lint.yml
================================================
# Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
#
# This Source Code Form is subject to the terms of the MIT License.
# If a copy of the MIT was not distributed with this file,
# You can obtain one at https://github.com/gogf/gf.

name: golangci-lint
on:
  push:
    branches:
      - master
      - develop
      - personal/**
      - feature/**
      - enhance/**
      - fix/**
      - feat/**
  pull_request:
    branches:
      - master
      - develop
      - personal/**
      - feature/**
      - enhance/**
      - fix/**
      - feat/**

jobs:
  golang-ci:
    strategy:
      matrix:
        go-version: [ "stable" ]

    name: golang-ci-lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          fetch-depth: 0
      - name: Setup Golang ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      - name: golang-ci-lint
        uses: golangci/golangci-lint-action@v8
        with:
          # Required: specify the golangci-lint version without the patch version to always use the latest patch.
          only-new-issues: true
          skip-cache: true
          github-token: ${{ secrets.GITHUB_TOKEN }}
          args: --config=.golangci.yml -v


================================================
FILE: .github/workflows/issue-check-inactive.yml
================================================
# Rule description: Execute the ISSUE once a day at 3 a.m. (GMT+8) and set the non-bug issue that has not been active in the last 7 days to inactive
name: Issue Check Inactive

on:
  schedule:
    - cron: "0 19 * * *"

env: # Set environment variables
  TZ: Asia/Shanghai #Time zone (setting the time zone allows the 'Last Updated' on the page to use the time zone)

permissions:
  contents: read

jobs:
  issue-check-inactive:
    permissions:
      issues: write # for actions-cool/issues-helper to update issues
     # pull-requests: write # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: check-inactive
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'check-inactive'
          inactive-label: 'inactive'
          inactive-day: 30
          issue-state: open
          exclude-labels: 'bug,planned,$exclude-empty'

================================================
FILE: .github/workflows/issue-close-inactive.yml
================================================
# RULE DESCRIPTION: EXECUTED ONCE A DAY AT 4 A.M. (GMT+8) TO CLOSE NON-BUG ISSUES THAT HAVE NOT BEEN ACTIVE IN THE LAST 30 DAYS
name: Issue Close Inactive

on:
  schedule:
    - cron: "0 20 * * *"

env: # Set environment variables
  TZ: Asia/Shanghai #Time zone (setting the time zone allows the 'Last Updated' on the page to use the time zone)

jobs:
  close-issues:
    runs-on: ubuntu-latest
    steps:
      - name: need close
        uses: actions-cool/issues-helper@v3
        with:
          actions: "close-issues"
#          token: ${{ secrets.GF_TOKEN }}
          labels: 'inactive'
          inactive-day: 30
          exclude-labels: 'bug,$exclude-empty'
          close-reason: 'not active'

================================================
FILE: .github/workflows/issue-labeled.yml
================================================
## Rule description: Add comments when an issue is marked as help wanted

name: Issue Labeled

on:
  issues:
    types: [labeled]

env: # Set environment variables
  TZ: Asia/Shanghai # Time zone (setting the time zone allows the 'Last Updated' on the page to use the time zone)

jobs:
  reply-labeled:
    runs-on: ubuntu-latest
    steps:
      - name: contribution welcome
        if: github.event.label.name == 'help wanted'
        uses: actions-cool/issues-helper@v3
        with:
          actions: "create-comment, remove-labels"
#          token: ${{ secrets.GF_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Hello @${{ github.event.issue.user.login }}. We like your proposal/feedback and would appreciate a contribution via a Pull Request by you or another community member. We thank you in advance for your contribution and are looking forward to reviewing it!
            你好 @${{ github.event.issue.user.login }}。我们喜欢您的提案/反馈,并希望您或其他社区成员通过拉取请求做出贡献。我们提前感谢您的贡献,并期待对其进行审查。


================================================
FILE: .github/workflows/issue-remove-inactive.yml
================================================
# Rule description: If an issue author updates or comments on an issue while it is not active and has not been closed, the inactive tag will be removed
name: Issue Remove Inactive

on:
  issues:
    types: [edited]
  issue_comment:
    types: [created, edited]

env: # Set environment variables
  TZ: Asia/Shanghai #Time zone (setting the time zone allows the 'Last Updated' on the page to use the time zone)

permissions:
  contents: read

jobs:
  issue-remove-inactive:
    permissions:
      issues: write  # for actions-cool/issues-helper to update issues
     # pull-requests: write # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: remove inactive
        if: github.event.issue.state == 'open'
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'remove-labels'
          issue-number: ${{ github.event.issue.number }}
          labels: 'inactive'


================================================
FILE: .github/workflows/issue-remove-need-more-details.yml
================================================
# Rule Description: For issues that need more details and are not yet closed, remove the "need more details" tag after the issue author comments
name: Issue Remove Need More Details

on:
  issues:
    types: [edited]
  issue_comment:
    types: [created, edited]

env: # Set environment variables
  TZ: Asia/Shanghai #Time zone (setting the time zone allows the 'Last Updated' on the page to use the time zone)

permissions:
  contents: read

jobs:
  issue-remove-need-more-details:
    permissions:
      issues: write # for actions-cool/issues-helper to update issues
     # pull-requests: write # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: remove need more details
        if: github.event.issue.state == 'open' && github.actor == github.event.issue.user.login
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'remove-labels'
          issue-number: ${{ github.event.issue.number }}
          labels: 'need more details'

================================================
FILE: .github/workflows/issue-translator.yml
================================================
# https://github.com/usthe/issues-translate-action
name: 'Issue Translator'
on:
  issue_comment:
    types: [created]
  issues:
    types: [opened]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: usthe/issues-translate-action@v2.7
        with:
          IS_MODIFY_TITLE: true
          # not require, default false. Decide whether to modify the issue title
          # if true, the robot account @Issues-translate-bot must have modification permissions,
          # invite @Issues-translate-bot to your project or use your custom bot.
          CUSTOM_BOT_NOTE: Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿

================================================
FILE: .github/workflows/nacos/docker-compose.yml
================================================
version: "3.8"

services:
  nacos:
    image: nacos/nacos-server:v2.1.2
    container_name: nacos
    env_file:
      - ./env/nacos.env
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    healthcheck:
      test: [ "CMD", "curl" ,"http://localhost:8848/nacos" ]
      interval: 5s
      timeout: 3s
      retries: 10

  initializer:
    image: alpine/curl:latest
    depends_on:
      nacos:
        condition: service_healthy
    command: [ "sh", "-c", "curl -X POST 'http://nacos:8848/nacos/v1/cs/configs?dataId=config.toml&group=test&content=%5Bserver%5D%0A%09address%3D%22%3A8000%22'" ]


================================================
FILE: .github/workflows/nacos/env/nacos.env
================================================
PREFER_HOST_MODE=hostname
MODE=standalone


================================================
FILE: .github/workflows/redis/docker-compose.yml
================================================
version: "2"

services:
  redis-master:
    container_name: redis-master
    image: "loads/redis:7.0-sentinel"
    environment:
      - REDIS_REPLICATION_MODE=master
      - REDIS_PASSWORD=111111
    ports:
      - 6380:6379

  redis-slave1:
    container_name: redis-slave1
    image: "loads/redis:7.0-sentinel"
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PASSWORD=111111
      - REDIS_PASSWORD=111111
    ports:
      - 6381:6379
    depends_on:
      - redis-master
    links:
      - redis-master

  redis-slave2:
    container_name: redis-slave2
    image: "loads/redis:7.0-sentinel"
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PASSWORD=111111
      - REDIS_PASSWORD=111111
    ports:
      - 6382:6379
    depends_on:
      - redis-master
    links:
      - redis-master

  redis-sentinel-1:
    container_name: redis-sentinel-1
    image: "loads/redis-sentinel:7.0"
    environment:
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=111111
    depends_on:
      - redis-master
      - redis-slave1
      - redis-slave2
    ports:
      - 26379:26379
    links:
      - redis-master
      - redis-slave1
      - redis-slave2

  redis-sentinel-2:
    container_name: redis-sentinel-2
    image: "loads/redis-sentinel:7.0"
    environment:
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=111111
    depends_on:
      - redis-master
      - redis-slave1
      - redis-slave2
    links:
      - redis-master
      - redis-slave1
      - redis-slave2
    ports:
      - 26380:26379

  redis-sentinel-3:
    container_name: redis-sentinel-3
    image: "loads/redis-sentinel:7.0"
    environment:
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=111111
    depends_on:
      - redis-master
      - redis-slave1
      - redis-slave2
    ports:
      - 26381:26379
    links:
      - redis-master
      - redis-slave1
      - redis-slave2

================================================
FILE: .github/workflows/release.yml
================================================
name: GoFrame Release

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
    - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

env:
  TZ: Asia/Shanghai


jobs:
  build:
    name: Build And Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Github Code
        uses: actions/checkout@v5

      - name: Set Up Golang Environment
        uses: actions/setup-go@v5
        with:
          go-version: 1.25
          cache: false
      
      - name: Build CLI Binary
        run: |
          echo "Building linux amd64 binary..."
          cd cmd/gf
          GOOS=linux GOARCH=amd64 go build main.go
          chmod +x main
          ./main install -y

      - name: Build CLI Binary For All Platform
        run: |
          cd cmd/gf
          gf build main.go -n gf -a all -s linux,windows,darwin,freebsd,netbsd,openbsd -p temp

      - name: Move Files Before Release
        run: |
          cd cmd/gf/temp
          for OS in *;do for FILE in $OS/*;\
          do if [[ ${OS} =~ 'windows' ]];\
          then mv $FILE gf_$OS.exe && rm -rf $OS;\
          else mv $FILE gf_$OS && rm -rf $OS;\
          fi;done;done

      - name: Create Github Release
        id: create_release
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name:     ${{ github.ref }}
          name: GoFrame Release ${{ github.ref_name }}
          draft:        false
          prerelease:   false
      
      - name: Upload Release Asset
        id:   upload-release-asset
        uses: alexellis/upload-assets@0.4.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          asset_paths: '["cmd/gf/temp/gf_*"]'


================================================
FILE: .github/workflows/scorecard.yml
================================================
# This workflow uses actions that are not certified by GitHub. They are provided
# by a third-party and are governed by separate terms of service, privacy
# policy, and support documentation.

name: Scorecard supply-chain security
on:
  # For Branch-Protection check. Only the default branch is supported. See
  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
  branch_protection_rule:
  # To guarantee Maintained check is occasionally updated. See
  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
  schedule:
    - cron: '0 21 * * *'
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

# Declare default permissions as read only.
permissions: read-all

jobs:
  analysis:
    name: Scorecard analysis
    runs-on: ubuntu-latest
    # `publish_results: true` only works when run from the default branch. conditional can be removed if disabled.
    if: github.event.repository.default_branch == github.ref_name || github.event_name == 'pull_request'
    permissions:
      # Needed to upload the results to code-scanning dashboard.
      security-events: write
      # Needed to publish results and get a badge (see publish_results below).
      id-token: write
      # Uncomment the permissions below if installing in a private repository.
      # contents: read
      # actions: read

    steps:
      - name: "Checkout code"
        uses: actions/checkout@v4.2.2
        with:
          persist-credentials: false

      - name: "Run analysis"
        uses: ossf/scorecard-action@v2.4.1
        with:
          results_file: results.sarif
          results_format: sarif
          # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
          # - you want to enable the Branch-Protection check on a *public* repository, or
          # - you are installing Scorecard on a *private* repository
          # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional.
          # repo_token: ${{ secrets.SCORECARD_TOKEN }}

          # Public repositories:
          #   - Publish results to OpenSSF REST API for easy access by consumers
          #   - Allows the repository to include the Scorecard badge.
          #   - See https://github.com/ossf/scorecard-action#publishing-results.
          # For private repositories:
          #   - `publish_results` will always be set to `false`, regardless
          #     of the value entered here.
          publish_results: true

          # (Optional) Uncomment file_mode if you have a .gitattributes with files marked export-ignore
          # file_mode: git

      # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
      # format to the repository Actions tab.
      - name: "Upload artifact"
        uses: actions/upload-artifact@v4.6.1
        with:
          name: SARIF file
          path: results.sarif
          retention-days: 5

      # Upload the results to GitHub's code scanning dashboard (optional).
      # Commenting out will disable upload of results to your repo's Code Scanning dashboard
      - name: "Upload to code-scanning"
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif


================================================
FILE: .github/workflows/scripts/before_script.sh
================================================
#!/usr/bin/env bash

# Install gci
echo "Installing gci..."
go install github.com/daixiang0/gci@latest

# Check if the GCI is installed successfully
if ! command -v gci &> /dev/null
then
    echo "gci could not be installed. Please check your Go setup."
    exit 1
fi

# Use GCI to format the code
echo "Running gci to format code..."
gci write \
      --custom-order \
      --skip-generated \
      --skip-vendor \
      -s standard \
      -s blank \
      -s default \
      -s dot \
      -s "prefix(github.com/gogf/gf/v2)" \
      -s "prefix(github.com/gogf/gf/cmd)" \
      -s "prefix(github.com/gogf/gf/contrib)" \
      -s "prefix(github.com/gogf/gf/example)" \
      ./

# Check the code for changes
git diff --name-only --exit-code || if [ $? != 0 ]; then echo "Notice: gci check failed, please gci before pr." && exit 1; fi
echo "gci check pass."

# Add the local domain name to `/etc/hosts`
echo "Adding local domain to /etc/hosts..."
sudo echo "127.0.0.1   local" | sudo tee -a /etc/hosts

================================================
FILE: .github/workflows/scripts/ci-main-clean.sh
================================================
#!/usr/bin/env bash

dirpath=$1

# Extract the base directory name for pattern matching
if [ -n "$dirpath" ]; then
    dirname=$(basename "$dirpath")
    echo "Cleaning Docker resources for path: $dirpath (pattern: $dirname)"
    df -h /
    
    # Process containers and images based on the directory
    case "$dirname" in
        # "mysql")
        #     echo "Cleaning mysql resources..."
        #     containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
        #     if [ -n "$containers" ]; then
        #         echo "Stopping and removing mysql containers..."
        #         docker stop $containers 2>/dev/null || true
        #         docker rm -f $containers 2>/dev/null || true
        #     fi
        #     docker rmi -f $(docker images -q mysql 2>/dev/null) 2>/dev/null || true
        #     ;;
        "mssql")
            echo "Cleaning mssql resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing mssql containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q mcr.microsoft.com/mssql/server 2>/dev/null) 2>/dev/null || true
        ;;
        "pgsql")
            echo "Cleaning postgres resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing postgres containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q postgres 2>/dev/null) 2>/dev/null || true
        ;;
        "oracle")
            echo "Cleaning oracle resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing oracle containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q loads/oracle-xe-11g-r2 2>/dev/null) 2>/dev/null || true
        ;;
        "dm")
            echo "Cleaning dm resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing dm containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q loads/dm 2>/dev/null) 2>/dev/null || true
        ;;
        "clickhouse")
            echo "Cleaning clickhouse resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing clickhouse containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q clickhouse/clickhouse-server 2>/dev/null) 2>/dev/null || true
        ;;
        # "redis")
        #     echo "Cleaning redis resources..."
        #     containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
        #     if [ -n "$containers" ]; then
        #         echo "Stopping and removing redis containers..."
        #         docker stop $containers 2>/dev/null || true
        #         docker rm -f $containers 2>/dev/null || true
        #     fi
        #     docker rmi -f $(docker images -q redis loads/redis loads/redis-sentinel 2>/dev/null) 2>/dev/null || true
        #     ;;
        "etcd")
            echo "Cleaning etcd resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing etcd containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q bitnamilegacy/etcd 2>/dev/null) 2>/dev/null || true
        ;;
        # "consul")
        #     echo "Cleaning consul resources..."
        #     containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
        #     if [ -n "$containers" ]; then
        #         echo "Stopping and removing consul containers..."
        #         docker stop $containers 2>/dev/null || true
        #         docker rm -f $containers 2>/dev/null || true
        #     fi
        #     docker rmi -f $(docker images -q consul 2>/dev/null) 2>/dev/null || true
        #     ;;
        # "nacos")
        #     echo "Cleaning nacos resources..."
        #     containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
        #     if [ -n "$containers" ]; then
        #         echo "Stopping and removing nacos containers..."
        #         docker stop $containers 2>/dev/null || true
        #         docker rm -f $containers 2>/dev/null || true
        #     fi
        #     docker rmi -f $(docker images -q nacos/nacos-server 2>/dev/null) 2>/dev/null || true
        #     ;;
        # "polaris")
        #     echo "Cleaning polaris resources..."
        #     containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
        #     if [ -n "$containers" ]; then
        #         echo "Stopping and removing polaris containers..."
        #         docker stop $containers 2>/dev/null || true
        #         docker rm -f $containers 2>/dev/null || true
        #     fi
        #     docker rmi -f $(docker images -q polarismesh/polaris-standalone 2>/dev/null) 2>/dev/null || true
        #     ;;
        "zookeeper")
            echo "Cleaning zookeeper resources..."
            containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
            if [ -n "$containers" ]; then
                echo "Stopping and removing zookeeper containers..."
                docker stop $containers 2>/dev/null || true
                docker rm -f $containers 2>/dev/null || true
            fi
            docker rmi -f $(docker images -q zookeeper 2>/dev/null) 2>/dev/null || true
        ;;
        # "apollo")
        #     echo "Cleaning apollo resources..."
        #     containers=$(docker ps -aq --filter "name=$dirname" 2>/dev/null)
        #     if [ -n "$containers" ]; then
        #         echo "Stopping and removing apollo containers..."
        #         docker stop $containers 2>/dev/null || true
        #         docker rm -f $containers 2>/dev/null || true
        #     fi
        #     docker rmi -f $(docker images -q loads/apollo-quick-start 2>/dev/null) 2>/dev/null || true
        #     ;;
        *)
            # No matching pattern, skip cleanup
            echo "No specific Docker cleanup rule for '$dirname', skipping cleanup"
        ;;
    esac
    
    # Remove dangling images and volumes to free up space
    echo "Removing dangling images and unused volumes..."
    docker image prune -f 2>/dev/null || true
    docker volume prune -f 2>/dev/null || true
    
    echo "Docker cleanup completed for $dirname"
    docker system df
    df -h /
fi

# df -h /
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/root        72G   67G  5.4G  93% /
# tmpfs           7.9G   84K  7.9G   1% /dev/shm
# tmpfs           3.2G  2.6M  3.2G   1% /run
# tmpfs           5.0M     0  5.0M   0% /run/lock
# /dev/sdb16      881M   62M  758M   8% /boot
# /dev/sdb15      105M  6.2M   99M   6% /boot/efi
# /dev/sda1        74G  4.1G   66G   6% /mnt
# tmpfs           1.6G   12K  1.6G   1% /run/user/1001

# runner@runnervmg1sw1:~/work/gf/gf$ docker system df
# TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
# Images          18        11        8.326GB   1.644GB (19%)
# Containers      11        11        2.692GB   0B (0%)
# Local Volumes   11        8         665.7MB   211.9MB (31%)
# Build Cache     0         0         0B        0B

# runner@runnervmg1sw1:~/work/gf/gf$ docker images
# REPOSITORY                       TAG                               IMAGE ID       CREATED         SIZE
# alpine/curl                      latest                            99fd43792a61   2 days ago      13.5MB
# postgres                         17-alpine                         b6bf692a8125   9 days ago      278MB
# zookeeper                        3.8                               2f26c02b94ca   10 days ago     306MB
# mariadb                          11.4                              063fb6684f96   10 days ago     332MB
# mcr.microsoft.com/mssql/server   2022-latest                       a2fbff321505   4 weeks ago     1.61GB
# clickhouse/clickhouse-server     24.11.1.2557-alpine               2eee9fd3ae74   12 months ago   539MB
# redis                            7.0                               7705dd2858c1   18 months ago   109MB
# consul                           1.15                              686495461132   20 months ago   155MB
# mysql                            5.7                               5107333e08a8   23 months ago   501MB
# polarismesh/polaris-standalone   v1.17.2                           b7a8cf0a8438   2 years ago     545MB
# bitnamilegacy/etcd               3.4.24                            74ae5e205ac5   2 years ago     134MB
# nacos/nacos-server               v2.1.2                            a978644d9246   2 years ago     1.06GB
# loads/redis                      7.0-sentinel                      6f12d40540ba   3 years ago     114MB
# loads/dm                         v8.1.2.128_ent_x86_64_ctm_pack4   ccb727ce9dce   3 years ago     432MB
# loads/redis-sentinel             7.0                               6818c626f5ca   3 years ago     104MB
# loads/apollo-quick-start         latest                            8490de672148   3 years ago     190MB
# alpine                           3.8                               c8bccc0af957   5 years ago     4.41MB
# loads/oracle-xe-11g-r2           11.2.0                            0d19fd2e072e   6 years ago     2.1GB

# runner@runnervmg1sw1:~/work/gf/gf$ docker ps -s
# CONTAINER ID   IMAGE                                              COMMAND                  CREATED         STATUS                   PORTS                                                                                                                                                                                                                         NAMES                                                                               SIZE
# 8214f83420c6   zookeeper:3.8                                      "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes             2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, [::]:2181->2181/tcp, 8080/tcp                                                                                                                                                     d66bac92ae9646f688f70ed4b5176f14_zookeeper38_3a22ef                                 33kB (virtual 306MB)
# 8938d73842e8   loads/dm:v8.1.2.128_ent_x86_64_ctm_pack4           "/bin/bash /opt/star…"   6 minutes ago   Up 6 minutes             0.0.0.0:5236->5236/tcp, [::]:5236->5236/tcp                                                                                                                                                                                   ca280fbdb86f40c2acf86d7d526c6285_loadsdmv812128_ent_x86_64_ctm_pack4_770a59         844MB (virtual 1.28GB)
# 0d3a653fe1f2   loads/oracle-xe-11g-r2:11.2.0                      "/bin/sh -c '/usr/sb…"   6 minutes ago   Up 6 minutes             22/tcp, 8080/tcp, 0.0.0.0:1521->1521/tcp, [::]:1521->1521/tcp                                                                                                                                                                 2048856d428c4967b1c35193eb8c9192_loadsoraclexe11gr21120_295d54                      1.3GB (virtual 3.4GB)
# ca3936189166   polarismesh/polaris-standalone:v1.17.2             "/bin/bash run.sh"       6 minutes ago   Up 6 minutes             0.0.0.0:8090-8091->8090-8091/tcp, [::]:8090-8091->8090-8091/tcp, 8080/tcp, 8100-8101/tcp, 0.0.0.0:8093->8093/tcp, [::]:8093->8093/tcp, 8761/tcp, 15010/tcp, 0.0.0.0:9090-9091->9090-9091/tcp, [::]:9090-9091->9090-9091/tcp   cbd43dceef754e2d8aab507e33167be7_polarismeshpolarisstandalonev1172_ca40b6           299MB (virtual 844MB)
# 26169dad485e   clickhouse/clickhouse-server:24.11.1.2557-alpine   "/entrypoint.sh"         6 minutes ago   Up 6 minutes             0.0.0.0:8123->8123/tcp, [::]:8123->8123/tcp, 0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp, 9009/tcp                                                                                                        f1c7766fbe36401792a6f735d7acf123_clickhouseclickhouseserver241112557alpine_cfc034   338kB (virtual 539MB)
# 04689a1d581f   mcr.microsoft.com/mssql/server:2022-latest         "/opt/mssql/bin/laun…"   6 minutes ago   Up 6 minutes (healthy)   0.0.0.0:1433->1433/tcp, [::]:1433->1433/tcp                                                                                                                                                                                   41d685349a7640b28230db8d0f60efe7_mcrmicrosoftcommssqlserver2022latest_fe29fb        108MB (virtual 1.72GB)
# d5fbc5f811af   postgres:17-alpine                                 "docker-entrypoint.s…"   6 minutes ago   Up 6 minutes (healthy)   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp                                                                                                                                                                                   2783be71b5ce417ab9a31428e7b4d8f2_postgres17alpine_c60840                            63B (virtual 278MB)
# da96a7ad7a01   mariadb:11.4                                       "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes             0.0.0.0:3307->3306/tcp, [::]:3307->3306/tcp                                                                                                                                                                                   45eed646fa6c4a698893ee11cda95a4c_mariadb114_3a9cd6                                  2B (virtual 332MB)
# 27ba1904ba3a   mysql:5.7                                          "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes             0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp                                                                                                                                                                        ea6d7a4c207d427a95b5ae0db91fdf56_mysql57_c21053                                     4B (virtual 501MB)
# 518e785d1bb6   redis:7.0                                          "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes (healthy)   0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp                                                                                                                                                                                   af6044fc849e441bbc6c48f7a5ec5fec_redis70_b11994                                     0B (virtual 109MB)
# 7495ec2cd8e3   bitnamilegacy/etcd:3.4.24                          "/opt/bitnami/script…"   7 minutes ago   Up 7 minutes             0.0.0.0:2379->2379/tcp, [::]:2379->2379/tcp, 2380/tcp                                                                                                                                                                         49f2a2a6bf3a4fae842cc950bbc3658a_bitnamilegacyetcd3424_1265e1                       145MB (virtual 279MB)

# runner@runnervmg1sw1:~/work/gf/gf$ du -ah --max-depth=1 /usr | sort -n
# 4.0K    /usr/games
# 4.0K    /usr/lib64
# 6.6G    /usr/lib
# 9.3G    /usr/share
# 15M     /usr/lib32
# 24G     /usr/local
# 41G     /usr
# 95M     /usr/sbin
# 156M    /usr/include
# 158M    /usr/src
# 402M    /usr/libexec
# 841M    /usr/bin

# runner@runnervmg1sw1:~/work/gf/gf$ du -ah --max-depth=1 /opt | sort -n                                                                        
# 4.0K    /opt/pipx_bin
# 5.8G    /opt/hostedtoolcache
# 8.5G    /opt
# 12K     /opt/containerd
# 14M     /opt/hca
# 16K     /opt/post-generation
# 217M    /opt/runner-cache
# 243M    /opt/actionarchivecache
# 374M    /opt/google
# 515M    /opt/pipx
# 655M    /opt/az
# 783M    /opt/microsoft

# runner@runnervmg1sw1:~/work/gf/gf$ du -ah --max-depth=1 /opt/hostedtoolcache/ | sort -n
# 1.1G    /opt/hostedtoolcache/go
# 1.6G    /opt/hostedtoolcache/CodeQL
# 1.9G    /opt/hostedtoolcache/Python
# 5.8G    /opt/hostedtoolcache/
# 9.9M    /opt/hostedtoolcache/protoc
# 24K     /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk
# 217M    /opt/hostedtoolcache/Ruby
# 520M    /opt/hostedtoolcache/PyPy
# 574M    /opt/hostedtoolcache/node



================================================
FILE: .github/workflows/scripts/ci-main.sh
================================================
#!/usr/bin/env bash

coverage=$1

# find all path that contains go.mod.
for file in `find . -name go.mod`; do
    dirpath=$(dirname $file)
    echo $dirpath
    
    # package kubecm was moved to sub ci procedure.
    if [ "kubecm" = $(basename $dirpath) ]; then
        continue 1
    fi
    
    # examples directory was moved to sub ci procedure.
    if [[ $dirpath =~ "/examples/" ]]; then
        continue 1
    fi
    
    if [[ $file =~ "/testdata/" ]]; then
        echo "ignore testdata path $file"
        continue 1
    fi
    
    # Check if it's a contrib directory
    if [[ $dirpath =~ "/contrib/" ]]; then
        # Check if go version meets the requirement
        if ! go version | grep -qE "go${LATEST_GO_VERSION}"; then
            echo "ignore path $dirpath as go version is not ${LATEST_GO_VERSION}: $(go version)"
            # clean docker containers and images to free disk space
            # bash .github/workflows/scripts/ci-main-clean.sh "$dirpath"
            continue 1
        fi
    fi
    
    # if [[ $dirpath = "." ]]; then
    #     # No space left on device error sometimes occurs in CI pipelines, so clean the cache before tests.
    #     go clean -cache
    # fi
    
    cd $dirpath
    go mod tidy
    go build ./...
    
    # test with coverage
    if [ "${coverage}" = "coverage" ]; then
        go test ./... -count=1 -race -coverprofile=coverage.out -covermode=atomic -coverpkg=./...,github.com/gogf/gf/... || exit 1
        
        if grep -q "/gogf/gf/.*/v2" go.mod; then
            sed -i "s/gogf\/gf\(\/.*\)\/v2/gogf\/gf\/v2\1/g" coverage.out
        fi
    else
        go test ./... -count=1 -race || exit 1
    fi
    
    cd -
    # clean docker containers and images to free disk space
    # bash .github/workflows/scripts/ci-main-clean.sh "$dirpath"
done


================================================
FILE: .github/workflows/scripts/ci-sub.sh
================================================
#!/usr/bin/env bash

coverage=$1

# update code of submodules
git clone https://github.com/gogf/examples

# update go.mod in examples directory to replace github.com/gogf/gf packages with local directory
bash .github/workflows/scripts/replace_examples_gomod.sh

# Function to compare version numbers
version_compare() {
    local ver1=$1
    local ver2=$2
    
    # Remove 'go' prefix and 'v' if present
    ver1=$(echo "$ver1" | sed 's/^go//; s/^v//')
    ver2=$(echo "$ver2" | sed 's/^go//; s/^v//')
    
    # Split versions into major.minor format
    local major1=$(echo "$ver1" | cut -d. -f1)
    local minor1=$(echo "$ver1" | cut -d. -f2)
    local major2=$(echo "$ver2" | cut -d. -f1)
    local minor2=$(echo "$ver2" | cut -d. -f2)
    
    # Compare versions: return 0 if ver1 <= ver2, 1 otherwise
    if [ "$major1" -lt "$major2" ]; then
        return 0
    elif [ "$major1" -eq "$major2" ] && [ "$minor1" -le "$minor2" ]; then
        return 0
    else
        return 1
    fi
}

# Get current Go version
current_go_version=$(go version | grep -oE 'go[0-9]+\.[0-9]+')

# find all path that contains go.mod.
for file in `find . -name go.mod`; do
    dirpath=$(dirname $file)
    echo "Processing: $dirpath"

    # Only process examples and kubecm directories  

    # Process examples directory (only build, no tests)
    if [[ $dirpath =~ "/examples/" ]]; then
        echo "  the examples directory only needs to be built, not unit tests."
        cd $dirpath
        go mod tidy
        go build ./...
        cd -
        continue 1
    fi
    
    # Process kubecm directory
    if [ "kubecm" != $(basename $dirpath) ]; then
        echo "  Skipping: not kubecm directory"
        continue
    fi

    cd $dirpath

    # Read Go version requirement from go.mod
    if [ -f "go.mod" ]; then
        go_mod_version=$(grep '^go ' go.mod | awk '{print $2}' | head -1)
        
        if [ -n "$go_mod_version" ]; then
            echo "  go.mod requires: go$go_mod_version"
            echo "  current version: $current_go_version"
            
            # Check if go.mod version requirement is satisfied by current Go version
            if version_compare "$go_mod_version" "$current_go_version"; then
                echo "  ✓ Version requirement satisfied, proceeding with build and test"
                
                go mod tidy
                go build ./...
                go test ./... -race || exit 1
            else
                echo "  ✗ Current Go version ($current_go_version) does not meet requirement (go$go_mod_version), skipping"
            fi
        fi
    fi

    cd -
done


================================================
FILE: .github/workflows/scripts/docker-services.sh
================================================
#!/usr/bin/env bash
#
# GoFrame Docker Services Manager
# For managing Docker services used in local development and testing
#

set -e

# Container name prefix
PREFIX="goframe"

# Color definitions
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# Service definitions
declare -A SERVICES
declare -A SERVICE_PORTS
declare -A SERVICE_ENVS
declare -A SERVICE_OPTS

# Basic services
SERVICES["etcd"]="bitnamilegacy/etcd:3.4.24"
SERVICE_PORTS["etcd"]="2379:2379"
SERVICE_ENVS["etcd"]="-e ALLOW_NONE_AUTHENTICATION=yes"

SERVICES["redis"]="redis:7.0"
SERVICE_PORTS["redis"]="6379:6379"
SERVICE_OPTS["redis"]="--health-cmd 'redis-cli ping' --health-interval 10s --health-timeout 5s --health-retries 5"

SERVICES["mysql"]="mysql:5.7"
SERVICE_PORTS["mysql"]="3306:3306"
SERVICE_ENVS["mysql"]="-e MYSQL_DATABASE=test -e MYSQL_ROOT_PASSWORD=12345678"

SERVICES["mariadb"]="mariadb:11.4"
SERVICE_PORTS["mariadb"]="3307:3306"
SERVICE_ENVS["mariadb"]="-e MARIADB_DATABASE=test -e MARIADB_ROOT_PASSWORD=12345678"

SERVICES["postgres"]="postgres:17-alpine"
SERVICE_PORTS["postgres"]="5432:5432"
SERVICE_ENVS["postgres"]="-e POSTGRES_PASSWORD=12345678 -e POSTGRES_USER=postgres -e POSTGRES_DB=test -e TZ=Asia/Shanghai"
SERVICE_OPTS["postgres"]="--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5"

SERVICES["mssql"]="mcr.microsoft.com/mssql/server:2022-latest"
SERVICE_PORTS["mssql"]="1433:1433"
SERVICE_ENVS["mssql"]="-e TZ=Asia/Shanghai -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD=LoremIpsum86"

SERVICES["clickhouse"]="clickhouse/clickhouse-server:24.11.1.2557-alpine"
SERVICE_PORTS["clickhouse"]="9000:9000 -p 8123:8123 -p 9001:9001"

SERVICES["polaris"]="polarismesh/polaris-standalone:v1.17.2"
SERVICE_PORTS["polaris"]="8090:8090 -p 8091:8091 -p 8093:8093 -p 9090:9090 -p 9091:9091"

SERVICES["oracle"]="loads/oracle-xe-11g-r2:11.2.0"
SERVICE_PORTS["oracle"]="1521:1521"
SERVICE_ENVS["oracle"]="-e ORACLE_ALLOW_REMOTE=true -e ORACLE_SID=XE -e ORACLE_DB_USER_NAME=system -e ORACLE_DB_PASSWORD=oracle"

SERVICES["dm"]="loads/dm:v8.1.2.128_ent_x86_64_ctm_pack4"
SERVICE_PORTS["dm"]="5236:5236"

SERVICES["gaussdb"]="opengauss/opengauss:7.0.0-RC1.B023"
SERVICE_PORTS["gaussdb"]="9950:5432"
SERVICE_ENVS["gaussdb"]="-e GS_PASSWORD=UTpass@1234 -e TZ=Asia/Shanghai"
SERVICE_OPTS["gaussdb"]="--privileged=true"

SERVICES["zookeeper"]="zookeeper:3.8"
SERVICE_PORTS["zookeeper"]="2181:2181"

# Service groups
GROUP_DB="mysql mariadb postgres mssql oracle dm gaussdb clickhouse"
GROUP_CACHE="redis etcd"
GROUP_REGISTRY="polaris zookeeper"
GROUP_ALL="etcd redis mysql mariadb postgres mssql clickhouse polaris oracle dm gaussdb zookeeper"

# Working directories
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
WORKFLOW_DIR="$PROJECT_ROOT/.github/workflows"

# Print colored messages
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[OK]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Check if Docker is available
check_docker() {
    if ! command -v docker &> /dev/null; then
        print_error "Docker is not installed or not in PATH"
        exit 1
    fi
    if ! docker info &> /dev/null; then
        print_error "Docker service is not running"
        exit 1
    fi
}

# Get container name
get_container_name() {
    echo "${PREFIX}-$1"
}

# Start a single service
start_service() {
    local service=$1
    local container_name=$(get_container_name "$service")
    local image="${SERVICES[$service]}"
    local ports="${SERVICE_PORTS[$service]}"
    local envs="${SERVICE_ENVS[$service]}"
    local opts="${SERVICE_OPTS[$service]}"

    if [ -z "$image" ]; then
        print_error "Unknown service: $service"
        return 1
    fi

    # Check if container already exists
    if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
        if docker ps --format '{{.Names}}' | grep -q "^${container_name}$"; then
            print_warning "$service is already running"
            return 0
        else
            print_info "Starting existing container $service..."
            docker start "$container_name" > /dev/null
            print_success "$service started"
            return 0
        fi
    fi

    print_info "Starting $service..."
    
    # Build docker run command
    local cmd="docker run -d --name $container_name"
    
    # Add port mappings
    for port in $ports; do
        cmd="$cmd -p $port"
    done
    
    # Add environment variables
    if [ -n "$envs" ]; then
        cmd="$cmd $envs"
    fi
    
    # Add other options
    if [ -n "$opts" ]; then
        cmd="$cmd $opts"
    fi
    
    cmd="$cmd $image"
    
    if eval "$cmd" > /dev/null 2>&1; then
        print_success "$service started (container: $container_name)"
    else
        print_error "Failed to start $service"
        return 1
    fi
}

# Stop a single service
stop_service() {
    local service=$1
    local container_name=$(get_container_name "$service")

    if docker ps --format '{{.Names}}' | grep -q "^${container_name}$"; then
        print_info "Stopping $service..."
        docker stop "$container_name" > /dev/null
        print_success "$service stopped"
    else
        print_warning "$service is not running"
    fi
}

# Remove a single service
remove_service() {
    local service=$1
    local container_name=$(get_container_name "$service")

    if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
        print_info "Removing $service..."
        docker rm -f "$container_name" > /dev/null
        print_success "$service removed"
    else
        print_warning "$service container does not exist"
    fi
}

# View service logs
logs_service() {
    local service=$1
    local container_name=$(get_container_name "$service")
    local lines=${2:-100}

    if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
        docker logs --tail "$lines" -f "$container_name"
    else
        print_error "$service container does not exist"
        return 1
    fi
}

# Start docker-compose service
start_compose_service() {
    local service=$1
    local compose_file=""
    
    case $service in
        apollo)
            compose_file="$WORKFLOW_DIR/apollo/docker-compose.yml"
            ;;
        nacos)
            compose_file="$WORKFLOW_DIR/nacos/docker-compose.yml"
            ;;
        redis-cluster)
            compose_file="$WORKFLOW_DIR/redis/docker-compose.yml"
            ;;
        consul)
            compose_file="$WORKFLOW_DIR/consul/docker-compose.yml"
            ;;
        *)
            print_error "Unknown compose service: $service"
            return 1
            ;;
    esac
    
    if [ -f "$compose_file" ]; then
        print_info "Starting $service (docker-compose)..."
        docker compose -f "$compose_file" up -d
        print_success "$service started"
    else
        print_error "Compose file does not exist: $compose_file"
        return 1
    fi
}

# Stop docker-compose service
stop_compose_service() {
    local service=$1
    local compose_file=""
    
    case $service in
        apollo)
            compose_file="$WORKFLOW_DIR/apollo/docker-compose.yml"
            ;;
        nacos)
            compose_file="$WORKFLOW_DIR/nacos/docker-compose.yml"
            ;;
        redis-cluster)
            compose_file="$WORKFLOW_DIR/redis/docker-compose.yml"
            ;;
        consul)
            compose_file="$WORKFLOW_DIR/consul/docker-compose.yml"
            ;;
        *)
            print_error "Unknown compose service: $service"
            return 1
            ;;
    esac
    
    if [ -f "$compose_file" ]; then
        print_info "Stopping $service (docker-compose)..."
        docker compose -f "$compose_file" down
        print_success "$service stopped"
    else
        print_error "Compose file does not exist: $compose_file"
        return 1
    fi
}

# Show service status
show_status() {
    echo ""
    echo -e "${CYAN}========== GoFrame Docker Services Status ==========${NC}"
    echo ""
    printf "%-15s %-12s %-30s %s\n" "SERVICE" "STATUS" "CONTAINER" "PORTS"
    echo "--------------------------------------------------------------------------------"
    
    for service in $GROUP_ALL; do
        local container_name=$(get_container_name "$service")
        local status="stopped"
        local ports="-"
        
        if docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^${container_name}$"; then
            status="${GREEN}running${NC}"
            ports=$(docker port "$container_name" 2>/dev/null | tr '\n' ' ' || echo "-")
        elif docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "^${container_name}$"; then
            status="${YELLOW}stopped${NC}"
        else
            status="${RED}not created${NC}"
        fi
        
        printf "%-15s %-22b %-30s %s\n" "$service" "$status" "$container_name" "$ports"
    done
    
    echo ""
    echo -e "${CYAN}========== Compose Services ==========${NC}"
    echo ""
    
    for compose_svc in apollo nacos redis-cluster consul; do
        local running=0
        case $compose_svc in
            apollo)
                running=$(docker ps --filter "name=apollo" --format '{{.Names}}' 2>/dev/null | wc -l)
                ;;
            nacos)
                running=$(docker ps --filter "name=nacos" --format '{{.Names}}' 2>/dev/null | wc -l)
                ;;
            redis-cluster)
                running=$(docker ps --filter "name=redis-" --format '{{.Names}}' 2>/dev/null | wc -l)
                ;;
            consul)
                running=$(docker ps --filter "name=consul" --format '{{.Names}}' 2>/dev/null | wc -l)
                ;;
        esac
        
        if [ "$running" -gt 0 ]; then
            printf "%-15s ${GREEN}running${NC} (%d containers)\n" "$compose_svc" "$running"
        else
            printf "%-15s ${RED}stopped${NC}\n" "$compose_svc"
        fi
    done
    
    echo ""
}

# Show service information
show_service_info() {
    echo ""
    echo -e "${CYAN}========== Available Services ==========${NC}"
    echo ""
    echo -e "${YELLOW}Basic Services (standalone containers):${NC}"
    echo ""
    printf "%-15s %-50s %s\n" "SERVICE" "IMAGE" "PORTS"
    echo "--------------------------------------------------------------------------------"
    
    for service in $GROUP_ALL; do
        printf "%-15s %-50s %s\n" "$service" "${SERVICES[$service]}" "${SERVICE_PORTS[$service]}"
    done
    
    echo ""
    echo -e "${YELLOW}Compose Services (multi-container):${NC}"
    echo "  apollo        - Apollo Config Center (8080, 8070, 8060, 13306)"
    echo "  nacos         - Nacos Registry (8848, 9848, 9555)"
    echo "  redis-cluster - Redis Primary-Replica + Sentinel Cluster (6380-6382, 26379-26381)"
    echo "  consul        - Consul Service Discovery (8500, 8600)"
    echo ""
    echo -e "${YELLOW}Service Groups:${NC}"
    echo "  db       - Databases: $GROUP_DB"
    echo "  cache    - Cache: $GROUP_CACHE"
    echo "  registry - Registry: $GROUP_REGISTRY"
    echo "  all      - All basic services"
    echo ""
}

# Show help
show_help() {
    echo ""
    echo -e "${CYAN}GoFrame Docker Services Manager${NC}"
    echo ""
    echo "Usage: $0 <command> [service|group] [options]"
    echo ""
    echo "Commands:"
    echo "  start <service|group>    Start service or service group"
    echo "  stop <service|group>     Stop service or service group"
    echo "  restart <service|group>  Restart service or service group"
    echo "  remove <service|group>   Remove service container"
    echo "  logs <service> [lines]   View service logs (default 100 lines)"
    echo "  status                   Show all service status"
    echo "  info                     Show available service information"
    echo "  clean                    Remove all goframe containers"
    echo "  pull [service]           Pull images"
    echo ""
    echo "Services:"
    echo "  Basic: etcd, redis, mysql, mariadb, postgres, mssql,"
    echo "         clickhouse, polaris, oracle, dm, gaussdb, zookeeper"
    echo "  Compose: apollo, nacos, redis-cluster, consul"
    echo ""
    echo "Service Groups:"
    echo "  db       - All database services"
    echo "  cache    - Cache services (redis, etcd)"
    echo "  registry - Registry services (polaris, zookeeper)"
    echo "  all      - All basic services"
    echo ""
    echo "Examples:"
    echo "  $0 start mysql           # Start MySQL"
    echo "  $0 start db              # Start all databases"
    echo "  $0 start all             # Start all basic services"
    echo "  $0 start apollo          # Start Apollo (compose)"
    echo "  $0 stop all              # Stop all basic services"
    echo "  $0 logs mysql 50         # View last 50 lines of MySQL logs"
    echo "  $0 status                # View service status"
    echo ""
}

# Parse service groups
parse_services() {
    local input=$1
    case $input in
        db)
            echo "$GROUP_DB"
            ;;
        cache)
            echo "$GROUP_CACHE"
            ;;
        registry)
            echo "$GROUP_REGISTRY"
            ;;
        all)
            echo "$GROUP_ALL"
            ;;
        *)
            echo "$input"
            ;;
    esac
}

# Check if it's a compose service
is_compose_service() {
    local service=$1
    case $service in
        apollo|nacos|redis-cluster|consul)
            return 0
            ;;
        *)
            return 1
            ;;
    esac
}

# Pull images
pull_images() {
    local services=$1
    
    if [ -z "$services" ]; then
        services="$GROUP_ALL"
    fi
    
    for service in $services; do
        if [ -n "${SERVICES[$service]}" ]; then
            print_info "Pulling image: ${SERVICES[$service]}"
            docker pull "${SERVICES[$service]}"
        fi
    done
}

# Clean all goframe containers
clean_all() {
    print_info "Removing all $PREFIX containers..."
    local containers=$(docker ps -a --filter "name=$PREFIX" --format '{{.Names}}')
    
    if [ -n "$containers" ]; then
        for container in $containers; do
            docker rm -f "$container" > /dev/null
            print_success "Removed: $container"
        done
    else
        print_info "No $PREFIX containers found"
    fi
}

# Get service status mark
get_service_status_mark() {
    local service=$1
    local container_name=$(get_container_name "$service")
    
    if docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^${container_name}$"; then
        echo -e "${GREEN}*${NC}"
    else
        echo " "
    fi
}

# Get compose service status mark
get_compose_status_mark() {
    local service=$1
    local running=0
    
    case $service in
        apollo)
            running=$(docker ps --filter "name=apollo" --format '{{.Names}}' 2>/dev/null | wc -l)
            ;;
        nacos)
            running=$(docker ps --filter "name=nacos" --format '{{.Names}}' 2>/dev/null | wc -l)
            ;;
        redis-cluster)
            running=$(docker ps --filter "name=redis-" --format '{{.Names}}' 2>/dev/null | wc -l)
            ;;
        consul)
            running=$(docker ps --filter "name=consul" --format '{{.Names}}' 2>/dev/null | wc -l)
            ;;
    esac
    
    if [ "$running" -gt 0 ]; then
        echo -e "${GREEN}*${NC}"
    else
        echo " "
    fi
}

# Service selection menu
select_service_menu() {
    local action=$1
    local action_name=$2
    
    echo ""
    echo -e "${CYAN}========== Select Service to ${action_name} ==========${NC}"
    
    # Show running status for stop/restart/logs operations
    if [[ "$action" == "stop" || "$action" == "restart" || "$action" == "logs" ]]; then
        echo -e "  (${GREEN}*${NC} indicates running)"
    fi
    echo ""
    echo -e "${YELLOW}Basic Services:${NC}"
    printf "  %b1) etcd         %b2) redis        %b3) mysql\n" \
        "$(get_service_status_mark etcd)" "$(get_service_status_mark redis)" "$(get_service_status_mark mysql)"
    printf "  %b4) mariadb      %b5) postgres     %b6) mssql\n" \
        "$(get_service_status_mark mariadb)" "$(get_service_status_mark postgres)" "$(get_service_status_mark mssql)"
    printf "  %b7) clickhouse   %b8) polaris      %b9) oracle\n" \
        "$(get_service_status_mark clickhouse)" "$(get_service_status_mark polaris)" "$(get_service_status_mark oracle)"
    printf " %b10) dm          %b11) gaussdb     %b12) zookeeper\n" \
        "$(get_service_status_mark dm)" "$(get_service_status_mark gaussdb)" "$(get_service_status_mark zookeeper)"
    echo ""
    echo -e "${YELLOW}Compose Services:${NC}"
    printf " %b13) apollo      %b14) nacos       %b15) redis-cluster\n" \
        "$(get_compose_status_mark apollo)" "$(get_compose_status_mark nacos)" "$(get_compose_status_mark redis-cluster)"
    printf " %b16) consul\n" "$(get_compose_status_mark consul)"
    echo ""
    echo -e "${YELLOW}Service Groups:${NC}"
    echo "  17) db (all databases)    18) cache (cache services)"
    echo "  19) registry (registry services) 20) all (all basic services)"
    echo ""
    echo "   0) Back to main menu"
    echo ""
    read -p "Select [0-20]: " svc_choice
    
    local svc=""
    case $svc_choice in
        1) svc="etcd" ;;
        2) svc="redis" ;;
        3) svc="mysql" ;;
        4) svc="mariadb" ;;
        5) svc="postgres" ;;
        6) svc="mssql" ;;
        7) svc="clickhouse" ;;
        8) svc="polaris" ;;
        9) svc="oracle" ;;
        10) svc="dm" ;;
        11) svc="gaussdb" ;;
        12) svc="zookeeper" ;;
        13) svc="apollo" ;;
        14) svc="nacos" ;;
        15) svc="redis-cluster" ;;
        16) svc="consul" ;;
        17) svc="db" ;;
        18) svc="cache" ;;
        19) svc="registry" ;;
        20) svc="all" ;;
        0) return ;;
        *)
            print_error "Invalid selection"
            return
            ;;
    esac
    
    case $action in
        start)
            if is_compose_service "$svc"; then
                start_compose_service "$svc"
            else
                for s in $(parse_services "$svc"); do
                    start_service "$s"
                done
            fi
            ;;
        stop)
            if is_compose_service "$svc"; then
                stop_compose_service "$svc"
            else
                for s in $(parse_services "$svc"); do
                    stop_service "$s"
                done
            fi
            ;;
        restart)
            if is_compose_service "$svc"; then
                stop_compose_service "$svc"
                start_compose_service "$svc"
            else
                for s in $(parse_services "$svc"); do
                    stop_service "$s"
                    start_service "$s"
                done
            fi
            ;;
        remove)
            for s in $(parse_services "$svc"); do
                remove_service "$s"
            done
            ;;
        logs)
            if is_compose_service "$svc"; then
                print_error "For Compose services, please use 'docker compose logs'"
            else
                read -p "Number of lines (default 100): " lines
                lines=${lines:-100}
                logs_service "$svc" "$lines"
            fi
            ;;
        pull)
            pull_images "$(parse_services "$svc")"
            ;;
    esac
}

# Interactive menu
interactive_menu() {
    while true; do
        echo ""
        echo -e "${CYAN}========== GoFrame Docker Services Manager ==========${NC}"
        echo ""
        echo "  1) Start Service"
        echo "  2) Stop Service"
        echo "  3) Restart Service"
        echo "  4) Remove Service"
        echo "  5) View Logs"
        echo "  6) View Status"
        echo "  7) Service Info"
        echo "  8) Clean All Containers"
        echo "  9) Pull Images"
        echo "  0) Exit"
        echo ""
        read -p "Select operation [0-9]: " choice
        
        case $choice in
            1)
                select_service_menu "start" "Start"
                ;;
            2)
                select_service_menu "stop" "Stop"
                ;;
            3)
                select_service_menu "restart" "Restart"
                ;;
            4)
                select_service_menu "remove" "Remove"
                ;;
            5)
                select_service_menu "logs" "View Logs"
                ;;
            6)
                show_status
                ;;
            7)
                show_service_info
                ;;
            8)
                read -p "Confirm removing all goframe containers? [y/N]: " confirm
                if [[ "$confirm" =~ ^[Yy]$ ]]; then
                    clean_all
                fi
                ;;
            9)
                select_service_menu "pull" "Pull Images"
                ;;
            0)
                echo "Goodbye!"
                exit 0
                ;;
            *)
                print_error "Invalid selection"
                ;;
        esac
    done
}

# Main function
main() {
    check_docker
    
    if [ $# -eq 0 ]; then
        interactive_menu
        exit 0
    fi
    
    local command=$1
    local target=$2
    local extra=$3
    
    case $command in
        start)
            if [ -z "$target" ]; then
                print_error "Please specify service name or service group"
                exit 1
            fi
            if is_compose_service "$target"; then
                start_compose_service "$target"
            else
                for service in $(parse_services "$target"); do
                    start_service "$service"
                done
            fi
            ;;
        stop)
            if [ -z "$target" ]; then
                print_error "Please specify service name or service group"
                exit 1
            fi
            if is_compose_service "$target"; then
                stop_compose_service "$target"
            else
                for service in $(parse_services "$target"); do
                    stop_service "$service"
                done
            fi
            ;;
        restart)
            if [ -z "$target" ]; then
                print_error "Please specify service name or service group"
                exit 1
            fi
            if is_compose_service "$target"; then
                stop_compose_service "$target"
                start_compose_service "$target"
            else
                for service in $(parse_services "$target"); do
                    stop_service "$service"
                    start_service "$service"
                done
            fi
            ;;
        remove|rm)
            if [ -z "$target" ]; then
                print_error "Please specify service name or service group"
                exit 1
            fi
            for service in $(parse_services "$target"); do
                remove_service "$service"
            done
            ;;
        logs)
            if [ -z "$target" ]; then
                print_error "Please specify service name"
                exit 1
            fi
            logs_service "$target" "${extra:-100}"
            ;;
        status|ps)
            show_status
            ;;
        info|list)
            show_service_info
            ;;
        clean)
            clean_all
            ;;
        pull)
            pull_images "$target"
            ;;
        help|--help|-h)
            show_help
            ;;
        *)
            print_error "Unknown command: $command"
            show_help
            exit 1
            ;;
    esac
}

main "$@"


================================================
FILE: .github/workflows/scripts/replace_examples_gomod.sh
================================================
#!/usr/bin/env bash

# Get the absolute path to the repository root
repo_root=$(pwd)
workdir=$repo_root/examples

echo "Prepare to process go.mod files in the ${workdir} directory"

# Check if examples directory exists
if [ ! -d "${workdir}" ]; then
    echo "Error: examples directory not found at ${workdir}"
    exit 1
fi

# Check if find command is available
if ! command -v find &> /dev/null; then
    echo "Error: find command not found!"
    exit 1
fi

for file in `find ${workdir} -name go.mod`; do
    goModPath=$(dirname $file)
    echo ""
    echo "Processing dir: $goModPath"

    # Calculate relative path to root
    # First get the relative path from go.mod to repo root
    relativePath=""
    current="$goModPath"
    while [ "$current" != "$repo_root" ]; do
        relativePath="../$relativePath"
        current=$(dirname "$current")
    done
    relativePath=${relativePath%/}  # Remove trailing slash
    echo "Relative path to root: $relativePath"

    # Get all github.com/gogf/gf dependencies
    # Use awk to get package names without version numbers
    dependencies=$(awk '/^[[:space:]]*github\.com\/gogf\/gf\// {print $1}' "$file" | sort -u)
    
    if [ -n "$dependencies" ]; then
        echo "Found GoFrame dependencies:"
        echo "$dependencies"
        echo "Adding replace directives..."

        # Create temporary file
        temp_file="${file}.tmp"
        # Remove existing replace directives and copy to temp file
        sed '/^replace.*github\.com\/gogf\/gf.*/d' "$file" > "$temp_file"
        
        # Add new replace block
        echo "" >> "$temp_file"
        echo "replace (" >> "$temp_file"
        
        while IFS= read -r dep; do
            # Skip empty lines
            [ -z "$dep" ] && continue
            
            # Calculate the relative path for the replacement
            if [[ "$dep" == "github.com/gogf/gf/v2" ]]; then
                replacement="$relativePath"
            else
                # Extract the path after v2 and remove trailing version
                subpath=$(echo "$dep" | sed -E 's/github\.com\/gogf\/gf\/(contrib\/[^/]+\/[^/]+)\/v2.*/\1/')
                replacement="$relativePath/$subpath"
            fi
            
            echo "    $dep => $replacement/" >> "$temp_file"
        done <<< "$dependencies"
        
        echo ")" >> "$temp_file"
        
        # Replace original file with temporary file
        mv "$temp_file" "$file"
        echo "Replace directives added to $file"
    else
        echo "No GoFrame dependencies found in $file"
    fi
done

echo "\nAll go.mod files have been processed successfully."


================================================
FILE: .github/workflows/scripts/update_version.sh
================================================
#!/usr/bin/env bash

# Check if the number of parameters is 2
if [ $# -ne 2 ]; then
    echo "Invalid parameters, please execute in format: version.sh [directory] [version]"
    echo "Example: version.sh ./contrib v1.0.0"
    exit 1
fi

# Check if the first parameter is a directory and exists
if [ ! -d "$1" ]; then
    echo "Error: Directory does not exist"
    exit 1
fi

# Check if the second parameter starts with 'v'
if [[ "$2" != v* ]]; then
    echo "Error: Version number does not start with 'v'"
    exit 1
fi

workdir=$1
newVersion=$2
echo "Preparing to replace version numbers in all go.mod files under ${workdir} directory to ${newVersion}"


# Check if file exists
if [ -f "go.work" ]; then
    # File exists, rename it
    mv go.work go.work.${newVersion}
    echo "Backup go.work file to avoid affecting the upgrade"
fi

for file in `find ${workdir} -name go.mod`; do
    goModPath=$(dirname $file)
    echo ""
    echo "processing dir: $goModPath"
    cd $goModPath
    go mod tidy
    go list -f "{{if and (not .Indirect) (not .Main)}}{{.Path}}@${newVersion}{{end}}" -m all | grep "^github.com/gogf/gf"
    go list -f "{{if and (not .Indirect) (not .Main)}}{{.Path}}@${newVersion}{{end}}" -m all | grep "^github.com/gogf/gf" | xargs -L1 go get -v 
    go mod tidy
    cd -
done

if [ -f "go.work.${newVersion}" ]; then
    # File exists, rename it back
    mv go.work.${newVersion} go.work
    echo "Restore go.work file"
fi


================================================
FILE: .github/workflows/tag.yml
================================================
name: GoFrame AutoCreating SubMod Tags

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

env:
  TZ: Asia/Shanghai
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
  build:
    name: Auto Creating Tags
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Github Code
        uses: actions/checkout@v5
      - name: Auto Creating Tags For Contrib Packages
        run: |
          git config --global user.email "tagrobot@goframe.org"
          git config --global user.name  "TagRobot"
          # auto create tags for contrib packages.
          for file in `find contrib -name go.mod`; do
              tag=$(dirname $file)/${{ github.ref_name }}
              git tag $tag
              git push origin $tag
          done
      - name: update dependencies
        run: |
          go env -w GOPRIVATE=github.com/gogf/gf
          .github/workflows/scripts/update_version.sh ./cmd/gf ${{ github.ref_name }}
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v4
        with:
          commit-message: 'update gf cli to ${{ github.ref_name }}'
          title: 'fix: update gf cli to ${{ github.ref_name }}'
          base: master
          branch: fix/${{ github.ref_name }}
          delete-branch: true
      - name: Commit & Push changes
        uses: actions-js/push@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: fix/${{ github.ref_name }}
          author_name: TagRobot
          author_email: tagrobot@goframe.org
          message: 'fix: update gf cli to ${{ github.ref_name }}'
      - name: Auto Creating Tags For cli tool
        run: |
          git config --global user.email "tagrobot@goframe.org"
          git config --global user.name  "TagRobot"
          # auto create tag for cli tool
          for file in `find cmd -name go.mod -not -path "*/testdata/*"`; do
              tag=$(dirname $file)/${{ github.ref_name }}
              git tag $tag
              git push origin $tag
          done


================================================
FILE: .gitignore
================================================
.buildpath
.hgignore.swp
.project
.orig
.swp
.idea/
.settings/
.vscode/
vendor/
bin/
**/.DS_Store
.test/
cmd/gf/main
cmd/gf/gf
temp/
example/log
go.work
go.work.sum
!cmd/gf/go.work
.windsurfrules

# Ignore for docs
node_modules
.docusaurus
output
.example/
.golangci.bck.yml
*.exe

================================================
FILE: .gitmodules
================================================


================================================
FILE: .golangci.yml
================================================
version: "2"
run:
  concurrency: 4
  modules-download-mode: readonly
  issues-exit-code: 2
  tests: false
  allow-parallel-runners: true
  allow-serial-runners: true
linters:
  default: none
  enable:
    - errcheck
    - errchkjson
    - funlen
    - goconst
    - gocritic
    - govet
    - misspell
    - nolintlint
    - revive
    - staticcheck
    - usestdlibvars
    - whitespace
  settings:
    funlen:
      lines: 340
      statements: -1
    goconst:
      match-constant: false
      min-len: 4
      min-occurrences: 30
      numbers: true
      min: 5
      max: 20
      ignore-calls: false
    gocritic:
      disabled-checks:
        - ifElseChain
        - assignOp
        - appendAssign
        - singleCaseSwitch
        - regexpMust
        - typeSwitchVar
        - elseif
    govet:
      disable:
        - asmdecl
        - assign
        - atomic
        - atomicalign
        - bools
        - buildtag
        - cgocall
        - composites
        - copylocks
        - deepequalerrors
        - errorsas
        - fieldalignment
        - findcall
        - framepointer
        - httpresponse
        - ifaceassert
        - loopclosure
        - lostcancel
        - nilfunc
        - nilness
        - reflectvaluecompare
        - shift
        - shadow
        - sigchanyzer
        - sortslice
        - stdmethods
        - stringintconv
        - structtag
        - testinggoroutine
        - tests
        - unmarshal
        - unreachable
        - unsafeptr
        - unusedwrite
      enable-all: true
      settings:
        printf:
          funcs:
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
        unusedresult:
          funcs:
            - pkg.MyFunc
            - context.WithCancel
          stringmethods:
            - MyMethod
    misspell:
      locale: US
      ignore-rules:
        - cancelled
    revive:
      severity: error
      rules:
        - name: atomic
        - name: line-length-limit
          arguments:
            - 380
          severity: error
        - name: unhandled-error
          severity: warning
          disabled: true
        - name: var-naming
          arguments:
            - - ID
              - URL
              - IP
              - HTTP
              - JSON
              - API
              - UID
              - Id
              - Api
              - Uid
              - Http
              - Json
              - Ip
              - Url
            - - VM
          severity: warning
          disabled: true
        - name: string-format
          arguments:
            - - core.WriteError[1].Message
              - /^([^A-Z]|$)/
              - must not start with a capital letter
            - - fmt.Errorf[0]
              - /(^|[^\.!?])$/
              - must not end in punctuation
            - - panic
              - /^[^\n]*$/
              - must not contain line breaks
          severity: warning
          disabled: false
        - name: function-result-limit
          arguments:
            - 4
          severity: warning
          disabled: false
    staticcheck:
      checks: [ "all","-S1000","-S1009","-S1016","-S1023","-S1025","-S1029","-S1034","-S1040","-SA1016","-SA1019","-SA1029","-SA4006","-SA4015","-SA6003","-SA9003","-ST1003","-QF1001","-QF1002","-QF1003","-QF1006","-QF1007","-QF1008","-QF1011","-QF1012","-ST1011" ]
      initialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "SIP", "RTP", "AMQP", "DB", "TS" ]
      dot-import-whitelist: [ "fmt" ]
      http-status-code-whitelist: [ "200", "400", "404", "500" ]
  exclusions:
    generated: lax
    presets:
      - comments
      - common-false-positives
      - legacy
      - std-error-handling
    rules:
      - linters:
          - revive
        path: _test\.go
        text: context.Context should be the first parameter of a function
      - linters:
          - revive
        path: _test\.go
        text: exported func.*returns unexported type.*which can be annoying to use
      - linters:
          - gocritic
        text: 'unnecessaryDefer:'
      - linters:
          - goconst
        path: (.+)_test\.go
    paths:
      - third_party$
      - builtin$
      - examples$
formatters:
  enable:
    - gci
    - gofmt
    - goimports
  settings:
    gci:
      sections:
        - standard
        - blank
        - default
        - dot
        - prefix(github.com/gogf/gf/v2)
        - prefix(github.com/gogf/gf/cmd)
        - prefix(github.com/gogf/gfcontrib)
        - prefix(github.com/gogf/gf/example)
      custom-order: true
      no-lex-order: false
    gofmt:
      simplify: true
      rewrite-rules:
        - pattern: 'interface{}'
          replacement: 'any'
        - pattern: 'reflect.Ptr'
          replacement: 'reflect.Pointer'
        - pattern: 'ioutil.ReadAll'
          replacement: 'io.ReadAll'
        - pattern: 'ioutil.WriteFile'
          replacement: 'os.WriteFile'
        - pattern: 'ioutil.ReadFile'
          replacement: 'os.ReadFile'
        - pattern: 'ioutil.NopCloser'
          replacement: 'io.NopCloser'
    goimports:
      local-prefixes:
        - github.com/gogf/gf/v2
  exclusions:
    generated: lax
    paths:
      - third_party$
      - builtin$
      - examples$


================================================
FILE: .make_tidy.sh
================================================
#!/usr/bin/env bash

# Function to run sed in-place with OS-specific options
sed_replace() {
    if [[ "$OSTYPE" == "darwin"* ]]; then
        # macOS - requires empty string after -i
        sed -i '' "$@"
    else
        # Linux/Windows Git Bash
        sed -i "$@"
    fi
}

workdir=.
echo "Prepare to tidy all go.mod files in the ${workdir} directory"

# check find command support or not
output=$(find "${workdir}" -name go.mod 2>&1)
if [[ $? -ne 0 ]]; then
    echo "Error: please use bash or zsh to run!"
    exit 1
fi

for file in `find ${workdir} -name go.mod`; do
    goModPath=$(dirname $file)
    echo ""
    echo "processing dir: $goModPath"

    if [[ $goModPath =~ "/testdata/" ]]; then
        echo "ignore testdata path $goModPath"
        continue 1
    fi

    if [[ $goModPath =~ "/examples/" ]]; then
        echo "ignore examples path $goModPath"
        continue 1
    fi

    cd $goModPath
    # Remove indirect dependencies
    sed_replace '/\/\/ indirect/d' go.mod
    go mod tidy
    # Remove toolchain line if exists
    sed_replace '/^toolchain/d' go.mod
    cd - > /dev/null
done


================================================
FILE: .make_version.sh
================================================
#!/usr/bin/env bash

# Function to run sed in-place with OS-specific options
sed_replace() {
    if [[ "$OSTYPE" == "darwin"* ]]; then
        # macOS - requires empty string after -i
        sed -i '' "$@"
    else
        # Linux/Windows Git Bash
        sed -i "$@"
    fi
}

if [ $# -ne 2 ]; then
    echo "Parameter exception, please execute in the format of $0 [directory] [version number]"
    echo "PS:$0 ./ v2.4.0"
    exit 1
fi

if [ ! -d "$1" ]; then
    echo "Error: Directory does not exist"
    exit 1
fi

if [[ "$2" != v* ]]; then
    echo "Error: Version number must start with v"
    exit 1
fi

workdir=.
newVersion=$2
echo "Prepare to replace the GoFrame library version numbers in all go.mod files in the ${workdir} directory with ${newVersion}"

# check find command support or not
output=$(find "${workdir}" -name go.mod 2>&1)
if [[ $? -ne 0 ]]; then
    echo "Error: please use bash or zsh to run!"
    exit 1
fi

if [[ true ]]; then
    # Use sed to replace the version number in version.go
    sed_replace 's/VERSION = ".*"/VERSION = "'${newVersion}'"/' version.go

    # Use sed to replace the version number in README.MD
    sed_replace 's/version=[^"]*/version='${newVersion}'/' README.MD
    sed_replace 's/version=[^"]*/version='${newVersion}'/' README.zh_CN.MD
fi

if [ -f "go.work" ]; then
    mv go.work go.work.version.bak
    echo "Back up the go.work file to avoid affecting the upgrade"
fi

for file in `find ${workdir} -name go.mod`; do
    goModPath=$(dirname $file)
    echo ""
    echo "processing dir: $goModPath"

    if [[ $goModPath =~ "/testdata/" ]]; then
        echo "ignore testdata path $goModPath"
        continue 1
    fi

    if [[ $goModPath =~ "/examples/" ]]; then
        echo "ignore examples path $goModPath"
        continue 1
    fi

    cd $goModPath

    # Add replace directive for local development.
    if [ $goModPath = "./cmd/gf" ]; then
        mv go.work go.work.version.bak
        go mod edit -replace github.com/gogf/gf/v2=../../
        go mod edit -replace github.com/gogf/gf/contrib/drivers/clickhouse/v2=../../contrib/drivers/clickhouse
        go mod edit -replace github.com/gogf/gf/contrib/drivers/mssql/v2=../../contrib/drivers/mssql
        go mod edit -replace github.com/gogf/gf/contrib/drivers/mysql/v2=../../contrib/drivers/mysql
        go mod edit -replace github.com/gogf/gf/contrib/drivers/oracle/v2=../../contrib/drivers/oracle
        go mod edit -replace github.com/gogf/gf/contrib/drivers/pgsql/v2=../../contrib/drivers/pgsql
        go mod edit -replace github.com/gogf/gf/contrib/drivers/sqlite/v2=../../contrib/drivers/sqlite
    fi
    # Remove indirect dependencies
    sed_replace '/\/\/ indirect/d' go.mod
    go mod tidy
    # Remove toolchain line if exists
    sed_replace '/^toolchain/d' go.mod

    # Upgrading only GoFrame related libraries, sometimes even if a version number is specified,
    # it may not be possible to successfully upgrade. Please confirm before submitting the code
    go list -f "{{if and (not .Indirect) (not .Main)}}{{.Path}}@${newVersion}{{end}}" -m all | grep "^github.com/gogf/gf"
    go list -f "{{if and (not .Indirect) (not .Main)}}{{.Path}}@${newVersion}{{end}}" -m all | grep "^github.com/gogf/gf" | xargs -L1 go get -v
    # Remove indirect dependencies
    sed_replace '/\/\/ indirect/d' go.mod
    go mod tidy
    # Remove toolchain line if exists
    sed_replace '/^toolchain/d' go.mod
    if [ $goModPath = "./cmd/gf" ]; then
        go mod edit -dropreplace github.com/gogf/gf/v2
        go mod edit -dropreplace github.com/gogf/gf/contrib/drivers/clickhouse/v2
        go mod edit -dropreplace github.com/gogf/gf/contrib/drivers/mssql/v2
        go mod edit -dropreplace github.com/gogf/gf/contrib/drivers/mysql/v2
        go mod edit -dropreplace github.com/gogf/gf/contrib/drivers/oracle/v2
        go mod edit -dropreplace github.com/gogf/gf/contrib/drivers/pgsql/v2
        go mod edit -dropreplace github.com/gogf/gf/contrib/drivers/sqlite/v2
        mv go.work.version.bak go.work
    fi
    cd -
done

if [ -f "go.work.version.bak" ]; then
    mv go.work.version.bak go.work
    echo "Restore the go.work file"
fi

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

Thanks for taking the time to join our community and start contributing!

## With issues

- Use the search tool before opening a new issue.
- Please provide source code and commit sha if you found a bug.
- Review existing issues and provide feedback or react to them.

## With pull requests

- Open your pull request against `master`
- Your pull request should have no more than two commits, if not you should squash them.
- It should pass all tests in the available continuous integrations systems such as GitHub CI.
- You should add/modify tests to cover your proposed code changes.
- If your pull request contains a new feature, please document it on the README.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2017 GoFrame Team https://goframe.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Makefile
================================================
SHELL := /bin/bash

# execute "go mod tidy" on all folders that have go.mod file
.PHONY: tidy
tidy:
	./.make_tidy.sh

# execute "golangci-lint" to check code style
# go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
.PHONY: lint
lint:
	golangci-lint run -c .golangci.yml

# make branch to=v2.4.0
.PHONY: branch
branch:
	@set -e; \
	newVersion=$(to); \
	if [ -z "$$newVersion" ]; then \
		echo "Error: 'to' variable is required. Usage: make branch to=vX.Y.Z"; \
		exit 1; \
	fi; \
	branchName=fix/$$newVersion; \
	echo "Switching to master branch..."; \
	git checkout master; \
	echo "Pulling latest changes from master..."; \
	git pull origin master; \
	echo "Creating and switching to branch $$branchName from master..."; \
	git checkout -b $$branchName; \
	echo "Branch $$branchName created successfully!"

# make version to=v2.4.0
.PHONY: version
version:
	@set -e; \
	newVersion=$(to); \
	./.make_version.sh ./ $$newVersion; \
	echo "make version to=$(to) done"

# make tag to=v2.4.0
.PHONY: tag
tag:
	@set -e; \
	newVersion=$(to); \
	echo "Switching to master branch..."; \
	git checkout master; \
	echo "Pulling latest changes from master..."; \
	git pull origin master; \
	echo "Creating annotated tag $$newVersion..."; \
	git tag -a $$newVersion -m "Release $$newVersion"; \
	echo "Pushing tag $$newVersion..."; \
	git push origin $$newVersion; \
	echo "Tag $$newVersion created and pushed successfully!"

# manage docker services for local development
# usage: make docker or make docker cmd=start svc=mysql
.PHONY: docker
docker:
	@if [ -z "$(cmd)" ]; then \
		./.github/workflows/scripts/docker-services.sh; \
	else \
		./.github/workflows/scripts/docker-services.sh $(cmd) $(svc) $(extra); \
	fi


================================================
FILE: README.MD
================================================
English | [简体中文](README.zh_CN.MD)

<div align=center>
<img src="https://goframe.org/img/logo_full.png" width="300" alt="goframe logo"/>

[![Go Reference](https://pkg.go.dev/badge/github.com/gogf/gf/v2.svg)](https://pkg.go.dev/github.com/gogf/gf/v2)
[![GoFrame CI](https://github.com/gogf/gf/actions/workflows/ci-main.yml/badge.svg)](https://github.com/gogf/gf/actions/workflows/ci-main.yml)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/gogf/gf/badge)](https://scorecard.dev/viewer/?uri=github.com/gogf/gf)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/9233/badge)](https://bestpractices.coreinfrastructure.org/projects/9233)
[![Go Report Card](https://goreportcard.com/badge/github.com/gogf/gf/v2)](https://goreportcard.com/report/github.com/gogf/gf/v2)
[![Code Coverage](https://codecov.io/gh/gogf/gf/branch/master/graph/badge.svg)](https://codecov.io/gh/gogf/gf)
[![Production Ready](https://img.shields.io/badge/production-ready-blue.svg?style=flat)](https://github.com/gogf/gf)
[![License](https://img.shields.io/github/license/gogf/gf.svg?style=flat)](https://github.com/gogf/gf)

[![Release](https://img.shields.io/github/v/release/gogf/gf?style=flat)](https://github.com/gogf/gf/releases)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/gogf/gf?style=flat)](https://github.com/gogf/gf/pulls)
[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/gogf/gf?style=flat)](https://github.com/gogf/gf/pulls?q=is%3Apr+is%3Aclosed)
[![GitHub issues](https://img.shields.io/github/issues/gogf/gf?style=flat)](https://github.com/gogf/gf/issues)
[![GitHub closed issues](https://img.shields.io/github/issues-closed/gogf/gf?style=flat)](https://github.com/gogf/gf/issues?q=is%3Aissue+is%3Aclosed)
![Stars](https://img.shields.io/github/stars/gogf/gf?style=flat)
![Forks](https://img.shields.io/github/forks/gogf/gf?style=flat)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/gogf/gf)

</div>

A powerful framework for faster, easier, and more efficient project development.

## Installation

```bash
go get -u github.com/gogf/gf/v2
```

## Documentation

- Official Site: [https://goframe.org](https://goframe.org)
- Official Site(en): [https://goframe.org/en](https://goframe.org/en)
- 国内镜像: [https://goframe.org.cn](https://goframe.org.cn)
- Mirror Site: [https://pages.goframe.org](https://pages.goframe.org)
- Mirror Site: [Offline Docs](https://github.com/gogf/goframe.org-pdf?tab=readme-ov-file#%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC)
- GoDoc API: [https://pkg.go.dev/github.com/gogf/gf/v2](https://pkg.go.dev/github.com/gogf/gf/v2)
- Doc Source: [https://github.com/gogf/gf-site](https://github.com/gogf/gf-site)

## Contributors

💖 [Thanks to all the contributors who made GoFrame possible](https://github.com/gogf/gf/graphs/contributors) 💖

<a href="https://github.com/gogf/gf/graphs/contributors">
<img src="https://goframe.org/img/contributors.svg?version=v2.10.0" alt="goframe contributors"/>
</a>

## License

`GoFrame` is licensed under the [MIT License](LICENSE), 100% free and open-source, forever.


================================================
FILE: README.zh_CN.MD
================================================
[English](README.MD) | 简体中文

<div align=center>
<img src="https://goframe.org/img/logo_full.png" width="300" alt="goframe logo"/>

[![Go Reference](https://pkg.go.dev/badge/github.com/gogf/gf/v2.svg)](https://pkg.go.dev/github.com/gogf/gf/v2)
[![GoFrame CI](https://github.com/gogf/gf/actions/workflows/ci-main.yml/badge.svg)](https://github.com/gogf/gf/actions/workflows/ci-main.yml)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/gogf/gf/badge)](https://scorecard.dev/viewer/?uri=github.com/gogf/gf)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/9233/badge)](https://bestpractices.coreinfrastructure.org/projects/9233)
[![Go Report Card](https://goreportcard.com/badge/github.com/gogf/gf/v2)](https://goreportcard.com/report/github.com/gogf/gf/v2)
[![Code Coverage](https://codecov.io/gh/gogf/gf/branch/master/graph/badge.svg)](https://codecov.io/gh/gogf/gf)
[![Production Ready](https://img.shields.io/badge/production-ready-blue.svg?style=flat)](https://github.com/gogf/gf)
[![License](https://img.shields.io/github/license/gogf/gf.svg?style=flat)](https://github.com/gogf/gf)

[![Release](https://img.shields.io/github/v/release/gogf/gf?style=flat)](https://github.com/gogf/gf/releases)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/gogf/gf?style=flat)](https://github.com/gogf/gf/pulls)
[![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/gogf/gf?style=flat)](https://github.com/gogf/gf/pulls?q=is%3Apr+is%3Aclosed)
[![GitHub issues](https://img.shields.io/github/issues/gogf/gf?style=flat)](https://github.com/gogf/gf/issues)
[![GitHub closed issues](https://img.shields.io/github/issues-closed/gogf/gf?style=flat)](https://github.com/gogf/gf/issues?q=is%3Aissue+is%3Aclosed)
![Stars](https://img.shields.io/github/stars/gogf/gf?style=flat)
![Forks](https://img.shields.io/github/forks/gogf/gf?style=flat)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/gogf/gf)

</div>

一款强大的框架,为了更快、更轻松、更高效的项目开发。

## 安装

```bash
go get -u github.com/gogf/gf/v2
```

## 文档

- 官方网站: [https://goframe.org](https://goframe.org)
- 官方网站(en): [https://goframe.org/en](https://goframe.org/en)
- 国内镜像: [https://goframe.org.cn](https://goframe.org.cn)
- 镜像网站: [https://pages.goframe.org](https://pages.goframe.org)
- 镜像网站: [离线文档](https://github.com/gogf/goframe.org-pdf?tab=readme-ov-file#%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC)
- Go包文档: [https://pkg.go.dev/github.com/gogf/gf/v2](https://pkg.go.dev/github.com/gogf/gf/v2)
- 文档源码: [https://github.com/gogf/gf-site](https://github.com/gogf/gf-site)

## 贡献者

💖 [感谢所有使 GoFrame 成为可能的贡献者](https://github.com/gogf/gf/graphs/contributors) 💖

<a href="https://github.com/gogf/gf/graphs/contributors">
<img src="https://goframe.org/img/contributors.svg?version=v2.10.0" alt="goframe contributors"/>
</a>

## 许可证

`GoFrame` 采用 [MIT License](LICENSE) 许可,100%开源和免费。


================================================
FILE: cmd/gf/LICENSE
================================================
MIT License

Copyright (c) 2018 john@goframe.org https://goframe.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: cmd/gf/Makefile
================================================
.DEFAULT_GOAL := pack

pack: pack.template-single pack.template-mono pack.template-mono-app

pack.template-single:
	@rm -fr temp
	@mkdir temp || exit 0
	@cd temp && git clone https://github.com/gogf/template-single
	@rm -fr temp/template-single/.git
	@cd temp && gf pack template-single ../internal/packed/template-single.go -n=packed -y
	@rm -fr temp

pack.template-mono:
	@rm -fr temp
	@mkdir temp || exit 0
	@cd temp && git clone https://github.com/gogf/template-mono
	@rm -fr temp/template-mono/.git
	@cd temp && gf pack template-mono ../internal/packed/template-mono.go -n=packed -y
	@rm -fr temp

# Note:
# command `sed` only works on MacOS.
# use `grep -irl 'template-single' temp| xargs sed -i'' -e 's/template-single/template-mono-app/g'` on other platforms.
pack.template-mono-app:
	@rm -fr temp
	@mkdir temp || exit 0
	@cd temp && git clone https://github.com/gogf/template-single
	@cd temp && mv template-single template-mono-app
	@rm -fr temp/template-mono-app/.git
	@rm -fr temp/template-mono-app/.gitattributes
	@rm -fr temp/template-mono-app/.gitignore
	@rm -fr temp/template-mono-app/go.mod
	@rm -fr temp/template-mono-app/go.sum
	@grep -irl 'template-single' temp| xargs sed -i '' -e 's/template-single/template-mono-app/g'
	@cd temp && gf pack template-mono-app ../internal/packed/template-mono-app.go -n=packed -y
	@rm -fr temp

================================================
FILE: cmd/gf/README.MD
================================================
English | [简体中文](README.zh_CN.MD)

# gf

`gf` is a powerful CLI tool for building [GoFrame](https://goframe.org) application with convenience.

## 1. Install

## 1) PreCompiled Binary

You can also install `gf` tool using pre-built binaries: <https://github.com/gogf/gf/releases>

1. `Mac` & `Linux`

   ```shell
    wget -O gf https://github.com/gogf/gf/releases/latest/download/gf_$(go env GOOS)_$(go env GOARCH) && chmod +x gf && ./gf install -y && rm ./gf
   ```

   > If you're using `zsh`, you might need rename your alias by command `alias gf=gf` to resolve the conflicts between `gf` and `git fetch`.

2. `Windows`
   Manually download, execute in command line it and then follow the instruction.

3. Database support

   |     DB     | builtin support |                                                                             remarks                                                                             |
   | :--------: | :-------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------: |
   |   mysql    |       yes       |                                                                                -                                                                                |
   |  mariadb   |       yes       |                                                                                -                                                                                |
   |    tidb    |       yes       |                                                                                -                                                                                |
   |   mssql    |       yes       |                                                                                -                                                                                |
   |   oracle   |       yes       |                                                                                -                                                                                |
   |   pgsql    |       yes       |                                                                                -                                                                                |
   |   sqlite   |       yes       |                                                                                -                                                                                |
   | sqlitecgo  |       no        | to support sqlite database on 32bit architecture systems, manually add package import to the [source codes](./internal/cmd/cmd_gen_dao.go) and do the building. |
   | clickhouse |       yes       |                                                                                -                                                                                |
   |     dm     |       no        |                              manually add package import to the [source codes](./internal/cmd/cmd_gen_dao.go) and do the building.                              |

## 2) Manually Install

```shell
go install github.com/gogf/gf/cmd/gf/v2@latest # latest version
go install github.com/gogf/gf/cmd/gf/v2@v2.5.5 # certain version(should be >= v2.5.5)
```

## 2. Commands

```shell
$ gf -h
USAGE
    gf COMMAND [OPTION]

COMMAND
    up         upgrade GoFrame version/tool to latest one in current project
    env        show current Golang environment variables
    fix        auto fixing codes after upgrading to new GoFrame version
    run        running go codes with hot-compiled-like feature
    gen        automatically generate go files for dao/do/entity/pb/pbentity
    tpl        template parsing and building commands
    init       create and initialize an empty GoFrame project
    pack       packing any file/directory to a resource file, or a go file
    build      cross-building go project for lots of platforms
    docker     build docker image for current GoFrame project
    install    install gf binary to system (might need root/admin permission)
    version    show version information of current binary
    doc        download https://pages.goframe.org/ to run locally

OPTION
    -y, --yes       all yes for all command without prompt ask
    -v, --version   show version information of current binary
    -d, --debug     show internal detailed debugging information
    -h, --help      more information about this command

ADDITIONAL
    Use "gf COMMAND -h" for details about a command.
```

## 3. FAQ

### 1). Command `gf run` returns `pipe: too many open files`

Please use `ulimit -n 65535` to enlarge your system configuration for max open files for current terminal shell session, and then `gf run`.


================================================
FILE: cmd/gf/README.zh_CN.MD
================================================
[English](README.MD) | 简体中文

# gf

`gf` 是一个强大的 CLI 工具,用于便捷地构建 [GoFrame](https://goframe.org) 应用程序。

## 1. 安装

## 1) 预编译二进制文件

您也可以使用预构建的二进制文件安装 `gf` 工具:<https://github.com/gogf/gf/releases>

1. `Mac` & `Linux`

   ```shell
    wget -O gf https://github.com/gogf/gf/releases/latest/download/gf_$(go env GOOS)_$(go env GOARCH) && chmod +x gf && ./gf install -y && rm ./gf
   ```

   > 如果您使用 `zsh`,您可能需要通过命令 `alias gf=gf` 重命名别名以解决 `gf` 和 `git fetch` 之间的冲突。

2. `Windows`
   手动下载,在命令行中执行,然后按照说明操作。

3. 数据库支持

   |     数据库     | 内置支持 |                                                                             说明                                                                             |
   | :--------: | :-------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------: |
   |   mysql    |       是       |                                                                                -                                                                                |
   |  mariadb   |       是       |                                                                                -                                                                                |
   |    tidb    |       是       |                                                                                -                                                                                |
   |   mssql    |       是       |                                                                                -                                                                                |
   |   oracle   |       是       |                                                                                -                                                                                |
   |   pgsql    |       是       |                                                                                -                                                                                |
   |   sqlite   |       是       |                                                                                -                                                                                |
   | sqlitecgo  |       否        | 要在 32 位架构系统上支持 sqlite 数据库,请手动向[源代码](./internal/cmd/cmd_gen_dao.go)添加包导入并进行构建。 |
   | clickhouse |       是        |                                                                                -                                                                                |
   |     dm     |       否        |                              手动向[源代码](./internal/cmd/cmd_gen_dao.go)添加包导入并进行构建。                              |

## 2) 手动安装

```shell
go install github.com/gogf/gf/cmd/gf/v2@latest # 最新版本
go install github.com/gogf/gf/cmd/gf/v2@v2.5.5 # 特定版本(应该 >= v2.5.5)
```

## 2. 命令

```shell
$ gf -h
用法
    gf 命令 [选项]

命令
    up         升级项目中的 GoFrame 版本/工具到最新版本
    env        显示当前 Golang 环境变量
    fix        升级到新 GoFrame 版本后自动修复代码
    run        运行 go 代码,具有热编译功能
    gen        自动生成 dao/do/entity/pb/pbentity 的 go 文件
    tpl        模板解析和构建命令
    init       创建并初始化一个空的 GoFrame 项目
    pack       将任何文件/目录打包到资源文件或 go 文件
    build      为多个平台交叉编译 go 项目
    docker     为当前 GoFrame 项目构建 docker 镜像
    install    将 gf 二进制文件安装到系统(可能需要 root/admin 权限)
    version    显示当前二进制文件的版本信息
    doc        下载 https://pages.goframe.org/ 本地运行

选项
    -y, --yes       对所有命令都使用 yes,不再提示
    -v, --version   显示当前二进制文件的版本信息
    -d, --debug     显示内部详细的调试信息
    -h, --help      显示此命令的更多信息

附加信息
    使用 "gf 命令 -h" 获取有关命令的详细信息。
```

## 3. 常见问题

### 1). 命令 `gf run` 返回 `pipe: too many open files`

请使用 `ulimit -n 65535` 扩大系统配置以增加当前终端 shell 会话的最大打开文件数,然后再运行 `gf run`。


================================================
FILE: cmd/gf/gfcmd/gfcmd.go
================================================
// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.

// Package gfcmd provides the management of CLI commands for `gf` tool.
package gfcmd

import (
	"context"
	"runtime"

	_ "github.com/gogf/gf/cmd/gf/v2/internal/packed"

	"github.com/gogf/gf/v2/errors/gcode"
	"github.com/gogf/gf/v2/errors/gerror"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gcfg"
	"github.com/gogf/gf/v2/os/gcmd"
	"github.com/gogf/gf/v2/os/gfile"
	"github.com/gogf/gf/v2/text/gstr"

	"github.com/gogf/gf/cmd/gf/v2/internal/cmd"
	"github.com/gogf/gf/cmd/gf/v2/internal/utility/allyes"
	"github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog"
)

const cliFolderName = `hack`

// Command manages the CLI command of `gf`.
// This struct can be globally accessible and extended with custom struct.
type Command struct {
	*gcmd.Command
}

// Run starts running the command according the command line arguments and options.
func (c *Command) Run(ctx context.Context) {
	defer func() {
		if exception := recover(); exception != nil {
			if err, ok := exception.(error); ok {
				mlog.Print(err.Error())
			} else {
				panic(gerror.NewCodef(gcode.CodeInternalPanic, "%+v", exception))
			}
		}
	}()

	// CLI configuration, using the `hack/config.yaml` in priority.
	if path, _ := gfile.Search(cliFolderName); path != "" {
		if adapter, ok := g.Cfg().GetAdapter().(*gcfg.AdapterFile); ok {
			if err := adapter.SetPath(path); err != nil {
				mlog.Fatal(err)
			}
		}
	}

	// zsh alias "git fetch" conflicts checks.
	handleZshAlias()

	// -y option checks.
	allyes.Init()

	// just run.
	if err := c.RunWithError(ctx); err != nil {
		// Exit with error message and exit code 1.
		// It is very important to exit the command process with code 1.
		mlog.Fatalf(`%+v`, err)
	}
}

// GetCommand retrieves and returns the root command of CLI `gf`.
func GetCommand(ctx context.Context) (*Command, error) {
	root, err := gcmd.NewFromObject(cmd.GF)
	if err != nil {
		return nil, err
	}
	err = root.AddObject(
		cmd.Up,
		cmd.Env,
		cmd.Fix,
		cmd.Run,
		cmd.Gen,
		cmd.Tpl,
		cmd.Init,
		cmd.Pack,
		cmd.Build,
		cmd.Docker,
		cmd.Install,
		cmd.Version,
		cmd.Doc,
	)
	if err != nil {
		return nil, err
	}
	command := &Command{
		root,
	}
	return command, nil
}

// zsh alias "git fetch" conflicts checks.
func handleZshAlias() {
	if runtime.GOOS == "windows" {
		return
	}
	if home, err := gfile.Home(); err == nil {
		zshPath := gfile.Join(home, ".zshrc")
		if gfile.Exists(zshPath) {
			var (
				aliasCommand = `alias gf=gf`
				content      = gfile.GetContents(zshPath)
			)
			if !gstr.Contains(content, aliasCommand) {
				_ = gfile.PutContentsAppend(zshPath, "\n"+aliasCommand+"\n")
			}
		}
	}
}


================================================
FILE: cmd/gf/go.mod
================================================
module github.com/gogf/gf/cmd/gf/v2

go 1.23.0

require (
	github.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.10.0
	github.com/gogf/gf/contrib/drivers/mssql/v2 v2.10.0
	github.com/gogf/gf/contrib/drivers/mysql/v2 v2.10.0
	github.com/gogf/gf/contrib/drivers/oracle/v2 v2.10.0
	github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.10.0
	github.com/gogf/gf/contrib/drivers/sqlite/v2 v2.10.0
	github.com/gogf/gf/v2 v2.10.0
	github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f
	github.com/olekukonko/tablewriter v1.1.0
	github.com/schollz/progressbar/v3 v3.15.0
	golang.org/x/mod v0.25.0
	golang.org/x/tools v0.26.0
)

require (
	aead.dev/minisign v0.2.0 // indirect
	github.com/BurntSushi/toml v1.5.0 // indirect
	github.com/ClickHouse/clickhouse-go/v2 v2.0.15 // indirect
	github.com/clbanning/mxj/v2 v2.7.0 // indirect
	github.com/dustin/go-humanize v1.0.1 // indirect
	github.com/emirpasic/gods/v2 v2.0.0-alpha // indirect
	github.com/fatih/color v1.18.0 // indirect
	github.com/fsnotify/fsnotify v1.9.0 // indirect
	github.com/glebarez/go-sqlite v1.21.2 // indirect
	github.com/go-logr/logr v1.4.3 // indirect
	github.com/go-logr/stdr v1.2.2 // indirect
	github.com/go-sql-driver/mysql v1.7.1 // indirect
	github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
	github.com/golang-sql/sqlexp v0.1.0 // indirect
	github.com/google/uuid v1.6.0 // indirect
	github.com/gorilla/websocket v1.5.3 // indirect
	github.com/grokify/html-strip-tags-go v0.1.0 // indirect
	github.com/lib/pq v1.10.9 // indirect
	github.com/magiconair/properties v1.8.10 // indirect
	github.com/mattn/go-colorable v0.1.13 // indirect
	github.com/mattn/go-isatty v0.0.20 // indirect
	github.com/mattn/go-runewidth v0.0.16 // indirect
	github.com/microsoft/go-mssqldb v1.7.1 // indirect
	github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
	github.com/olekukonko/errors v1.1.0 // indirect
	github.com/olekukonko/ll v0.0.9 // indirect
	github.com/paulmach/orb v0.7.1 // indirect
	github.com/pierrec/lz4/v4 v4.1.14 // indirect
	github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
	github.com/rivo/uniseg v0.4.7 // indirect
	github.com/shopspring/decimal v1.3.1 // indirect
	github.com/sijms/go-ora/v2 v2.7.10 // indirect
	go.opentelemetry.io/auto/sdk v1.1.0 // indirect
	go.opentelemetry.io/otel v1.38.0 // indirect
	go.opentelemetry.io/otel/metric v1.38.0 // indirect
	go.opentelemetry.io/otel/sdk v1.38.0 // indirect
	go.opentelemetry.io/otel/trace v1.38.0 // indirect
	golang.org/x/crypto v0.38.0 // indirect
	golang.org/x/net v0.40.0 // indirect
	golang.org/x/sync v0.14.0 // indirect
	golang.org/x/sys v0.35.0 // indirect
	golang.org/x/term v0.32.0 // indirect
	golang.org/x/text v0.25.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
	modernc.org/libc v1.22.5 // indirect
	modernc.org/mathutil v1.5.0 // indirect
	modernc.org/memory v1.5.0 // indirect
	modernc.org/sqlite v1.23.1 // indirect
)


================================================
FILE: cmd/gf/go.sum
================================================
aead.dev/minisign v0.2.0 h1:kAWrq/hBRu4AARY6AlciO83xhNnW9UaC8YipS2uhLPk=
aead.dev/minisign v0.2.0/go.mod h1:zdq6LdSd9TbuSxchxwhpA9zEb9YXcVGoE8JakuiGaIQ=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI=
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw=
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY=
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80=
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI=
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
github.com/ClickHouse/clickhouse-go/v2 v2.0.15 h1:lLAZliqrZEygkxosLaW1qHyeTb4Ho7fVCZ0WKCpLocU=
github.com/ClickHouse/clickhouse-go/v2 v2.0.15/go.mod h1:Z21o82zD8FFqefOQDg93c0XITlxGbTsWQuRm588Azkk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU=
github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo=
github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.10.0 h1:9PTchr92xIJej4tq5c+HOHSU7LGOHr3YfD7tuf23LW4=
github.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.10.0/go.mod h1:eKtLMs9uccxFvmoKOUCRQ/Se3nxhzEZwF0Ir13qbk5g=
github.com/gogf/gf/contrib/drivers/mssql/v2 v2.10.0 h1:mBs6XpNM34IdZPZv4Kv3LA8yhP2UisbONMLfnQVFvKM=
github.com/gogf/gf/contrib/drivers/mssql/v2 v2.10.0/go.mod h1:mChbF9FrmiYMSE2rG3zdxI/oSTwaHsR5KbINAgt3KcY=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.10.0 h1:UvqxwinkelKxwdwnKUfdy51/ls4RL7MCeJqAZOVAy0I=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.10.0/go.mod h1:6v7oGBF9wv59WERJIOJxXmLhkUcxwON3tPYW3AZ7wbY=
github.com/gogf/gf/contrib/drivers/oracle/v2 v2.10.0 h1:MvhoMaz8YYj4WJuYzKGDdzJYiieiYiqp0vjoOshfOF4=
github.com/gogf/gf/contrib/drivers/oracle/v2 v2.10.0/go.mod h1:vb2fx33RGhjhOaocOTEFvlEuBSGHss5S0lZ4sS3XK6E=
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.10.0 h1:39+jbTenm7KBj4hO2C8ANAxVHpX/7OuRDs1VcGC9ylA=
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.10.0/go.mod h1:B0s0fVzn0W220E8UTpSGzrrGKsop5KcB90twBeLCiz0=
github.com/gogf/gf/contrib/drivers/sqlite/v2 v2.10.0 h1:OyAH7Ls2c9Un7CJiAq7G6eY1jWIICRkN8C5SyM94rnY=
github.com/gogf/gf/contrib/drivers/sqlite/v2 v2.10.0/go.mod h1:fwhAMG0qZpeHbbP2JE78rJRfV7eBbu9jXkxTMM1lwyo=
github.com/gogf/gf/v2 v2.10.0 h1:rzDROlyqGMe/eM6dCalSR8dZOuMIdLhmxKSH1DGhbFs=
github.com/gogf/gf/v2 v2.10.0/go.mod h1:Svl1N+E8G/QshU2DUbh/3J/AJauqCgUnxHurXWR4Qx0=
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f h1:7xfXR/BhG3JDqO1s45n65Oyx9t4E/UqDOXep6jXdLCM=
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f/go.mod h1:HnYoio6S7VaFJdryKcD/r9HgX+4QzYfr00XiXUo/xz0=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/microsoft/go-mssqldb v1.7.1 h1:KU/g8aWeM3Hx7IMOFpiwYiUkU+9zeISb4+tx3ScVfsM=
github.com/microsoft/go-mssqldb v1.7.1/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615/go.mod h1:Ad7oeElCZqA1Ufj0U9/liOF4BtVepxRcTvr2ey7zTvM=
github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM=
github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI=
github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g=
github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY=
github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo=
github.com/paulmach/orb v0.7.1 h1:Zha++Z5OX/l168sqHK3k4z18LDvr+YAO/VjK0ReQ9rU=
github.com/paulmach/orb v0.7.1/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE=
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.m
Download .txt
gitextract_3xoiucv4/

├── .codecov.yml
├── .gitattributes
├── .gitee/
│   └── ISSUE_TEMPLATE
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── 00-bug.yml
│   │   ├── 01-enhance.yml
│   │   ├── 02-feature.yml
│   │   └── 03-question.yml
│   ├── PULL_REQUEST_TEMPLATE.MD
│   └── workflows/
│       ├── apollo/
│       │   ├── docker-compose.yml
│       │   └── sql/
│       │       ├── apolloconfigdb.sql
│       │       └── apolloportaldb.sql
│       ├── ci-main.yml
│       ├── ci-sub.yml
│       ├── codeql.yml
│       ├── consul/
│       │   ├── client.json
│       │   ├── docker-compose.yml
│       │   └── server.json
│       ├── format-code-on-push.yml
│       ├── gitee-sync.yml
│       ├── golangci-lint.yml
│       ├── issue-check-inactive.yml
│       ├── issue-close-inactive.yml
│       ├── issue-labeled.yml
│       ├── issue-remove-inactive.yml
│       ├── issue-remove-need-more-details.yml
│       ├── issue-translator.yml
│       ├── nacos/
│       │   ├── docker-compose.yml
│       │   └── env/
│       │       └── nacos.env
│       ├── redis/
│       │   └── docker-compose.yml
│       ├── release.yml
│       ├── scorecard.yml
│       ├── scripts/
│       │   ├── before_script.sh
│       │   ├── ci-main-clean.sh
│       │   ├── ci-main.sh
│       │   ├── ci-sub.sh
│       │   ├── docker-services.sh
│       │   ├── replace_examples_gomod.sh
│       │   └── update_version.sh
│       └── tag.yml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── .make_tidy.sh
├── .make_version.sh
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.MD
├── README.zh_CN.MD
├── cmd/
│   └── gf/
│       ├── LICENSE
│       ├── Makefile
│       ├── README.MD
│       ├── README.zh_CN.MD
│       ├── gfcmd/
│       │   └── gfcmd.go
│       ├── go.mod
│       ├── go.sum
│       ├── go.work
│       ├── internal/
│       │   ├── cmd/
│       │   │   ├── cmd.go
│       │   │   ├── cmd_build.go
│       │   │   ├── cmd_doc.go
│       │   │   ├── cmd_docker.go
│       │   │   ├── cmd_env.go
│       │   │   ├── cmd_fix.go
│       │   │   ├── cmd_gen.go
│       │   │   ├── cmd_gen_ctrl.go
│       │   │   ├── cmd_gen_dao.go
│       │   │   ├── cmd_gen_enums.go
│       │   │   ├── cmd_gen_pb.go
│       │   │   ├── cmd_gen_pbentity.go
│       │   │   ├── cmd_gen_service.go
│       │   │   ├── cmd_init.go
│       │   │   ├── cmd_install.go
│       │   │   ├── cmd_pack.go
│       │   │   ├── cmd_run.go
│       │   │   ├── cmd_tpl.go
│       │   │   ├── cmd_up.go
│       │   │   ├── cmd_version.go
│       │   │   ├── cmd_z_init_test.go
│       │   │   ├── cmd_z_unit_build_test.go
│       │   │   ├── cmd_z_unit_env_test.go
│       │   │   ├── cmd_z_unit_fix_test.go
│       │   │   ├── cmd_z_unit_gen_ctrl_test.go
│       │   │   ├── cmd_z_unit_gen_dao_issue_test.go
│       │   │   ├── cmd_z_unit_gen_dao_sharding_test.go
│       │   │   ├── cmd_z_unit_gen_dao_test.go
│       │   │   ├── cmd_z_unit_gen_enums_test.go
│       │   │   ├── cmd_z_unit_gen_pb_test.go
│       │   │   ├── cmd_z_unit_gen_pbentity_test.go
│       │   │   ├── cmd_z_unit_gen_service_test.go
│       │   │   ├── cmd_z_unit_pack_test.go
│       │   │   ├── cmd_z_unit_run_test.go
│       │   │   ├── genctrl/
│       │   │   │   ├── genctrl.go
│       │   │   │   ├── genctrl_api_item.go
│       │   │   │   ├── genctrl_ast_parse.go
│       │   │   │   ├── genctrl_ast_parse_clear.go
│       │   │   │   ├── genctrl_calculate.go
│       │   │   │   ├── genctrl_generate_ctrl.go
│       │   │   │   ├── genctrl_generate_ctrl_clear.go
│       │   │   │   ├── genctrl_generate_interface.go
│       │   │   │   └── genctrl_generate_sdk.go
│       │   │   ├── gendao/
│       │   │   │   ├── gendao.go
│       │   │   │   ├── gendao_clear.go
│       │   │   │   ├── gendao_dao.go
│       │   │   │   ├── gendao_do.go
│       │   │   │   ├── gendao_entity.go
│       │   │   │   ├── gendao_gen_item.go
│       │   │   │   ├── gendao_structure.go
│       │   │   │   ├── gendao_table.go
│       │   │   │   ├── gendao_tag.go
│       │   │   │   └── gendao_test.go
│       │   │   ├── genenums/
│       │   │   │   ├── genenums.go
│       │   │   │   ├── genenums_parser.go
│       │   │   │   └── genenums_z_unit_test.go
│       │   │   ├── geninit/
│       │   │   │   ├── geninit.go
│       │   │   │   ├── geninit_ast.go
│       │   │   │   ├── geninit_downloader.go
│       │   │   │   ├── geninit_env.go
│       │   │   │   ├── geninit_generator.go
│       │   │   │   ├── geninit_git_downloader.go
│       │   │   │   ├── geninit_selector.go
│       │   │   │   ├── geninit_version.go
│       │   │   │   └── geninit_z_unit_test.go
│       │   │   ├── genpb/
│       │   │   │   ├── genpb.go
│       │   │   │   ├── genpb_controller.go
│       │   │   │   └── genpb_tag.go
│       │   │   ├── genpbentity/
│       │   │   │   └── genpbentity.go
│       │   │   ├── genservice/
│       │   │   │   ├── genservice.go
│       │   │   │   ├── genservice_ast_parse.go
│       │   │   │   ├── genservice_ast_utils.go
│       │   │   │   ├── genservice_calculate.go
│       │   │   │   ├── genservice_generate.go
│       │   │   │   └── genservice_generate_template.go
│       │   │   └── testdata/
│       │   │       ├── build/
│       │   │       │   ├── multiple/
│       │   │       │   │   └── multiple.go
│       │   │       │   ├── single/
│       │   │       │   │   └── main.go
│       │   │       │   └── varmap/
│       │   │       │       ├── go.mod
│       │   │       │       ├── go.sum
│       │   │       │       └── main.go
│       │   │       ├── fix/
│       │   │       │   └── fix25_content.go
│       │   │       ├── genctrl/
│       │   │       │   ├── default/
│       │   │       │   │   ├── api/
│       │   │       │   │   │   └── article/
│       │   │       │   │   │       ├── article_expect.go
│       │   │       │   │   │       ├── v1/
│       │   │       │   │   │       │   ├── edit.go
│       │   │       │   │   │       │   └── get.go
│       │   │       │   │   │       └── v2/
│       │   │       │   │   │           └── edit.go
│       │   │       │   │   └── controller/
│       │   │       │   │       └── article/
│       │   │       │   │           ├── article.go
│       │   │       │   │           ├── article_new.go
│       │   │       │   │           ├── article_v1_create.go
│       │   │       │   │           ├── article_v1_get_list.go
│       │   │       │   │           ├── article_v1_get_one.go
│       │   │       │   │           ├── article_v1_update.go
│       │   │       │   │           ├── article_v2_create.go
│       │   │       │   │           └── article_v2_update.go
│       │   │       │   ├── merge/
│       │   │       │   │   ├── add_new_ctrl/
│       │   │       │   │   │   ├── api/
│       │   │       │   │   │   │   └── dict/
│       │   │       │   │   │   │       ├── dict_add_new_ctrl_expect.gotest
│       │   │       │   │   │   │       ├── dict_expect.go
│       │   │       │   │   │   │       └── v1/
│       │   │       │   │   │   │           └── dict_type.go
│       │   │       │   │   │   └── controller/
│       │   │       │   │   │       └── dict/
│       │   │       │   │   │           ├── dict.go
│       │   │       │   │   │           ├── dict_new.go
│       │   │       │   │   │           ├── dict_v1_dict_type.go
│       │   │       │   │   │           └── dict_v1_test_new.gotest
│       │   │       │   │   └── add_new_file/
│       │   │       │   │       ├── api/
│       │   │       │   │       │   └── dict/
│       │   │       │   │       │       ├── dict_add_new_ctrl_expect.gotest
│       │   │       │   │       │       ├── dict_expect.go
│       │   │       │   │       │       └── v1/
│       │   │       │   │       │           └── dict_type.go
│       │   │       │   │       └── controller/
│       │   │       │   │           └── dict/
│       │   │       │   │               ├── dict.go
│       │   │       │   │               ├── dict_new.go
│       │   │       │   │               ├── dict_v1_dict_type.go
│       │   │       │   │               └── dict_v1_test_new.gotest
│       │   │       │   └── multi/
│       │   │       │       ├── api/
│       │   │       │       │   ├── admin/
│       │   │       │       │   │   ├── article/
│       │   │       │       │   │   │   ├── article_expect.go
│       │   │       │       │   │   │   └── v1/
│       │   │       │       │   │   │       └── edit.go
│       │   │       │       │   │   └── user/
│       │   │       │       │   │       ├── user_expect.go
│       │   │       │       │   │       └── v1/
│       │   │       │       │   │           └── edit.go
│       │   │       │       │   └── app/
│       │   │       │       │       └── user/
│       │   │       │       │           ├── user_expect.go
│       │   │       │       │           ├── user_ext/
│       │   │       │       │           │   ├── user_ext_expect.go
│       │   │       │       │           │   └── v1/
│       │   │       │       │           │       └── edit.go
│       │   │       │       │           └── v1/
│       │   │       │       │               └── edit.go
│       │   │       │       └── controller/
│       │   │       │           ├── admin/
│       │   │       │           │   ├── article/
│       │   │       │           │   │   ├── article.go
│       │   │       │           │   │   ├── article_new.go
│       │   │       │           │   │   └── article_v1_create.go
│       │   │       │           │   └── user/
│       │   │       │           │       ├── user.go
│       │   │       │           │       ├── user_new.go
│       │   │       │           │       └── user_v1_create.go
│       │   │       │           └── app/
│       │   │       │               └── user/
│       │   │       │                   ├── user.go
│       │   │       │                   ├── user_ext/
│       │   │       │                   │   ├── user_ext.go
│       │   │       │                   │   ├── user_ext_new.go
│       │   │       │                   │   ├── user_ext_v1_create.go
│       │   │       │                   │   └── user_ext_v1_update.go
│       │   │       │                   ├── user_new.go
│       │   │       │                   ├── user_v1_create.go
│       │   │       │                   └── user_v1_update.go
│       │   │       ├── gendao/
│       │   │       │   ├── generated_user/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── generated_user_field_mapping/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── generated_user_sqlite3/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── generated_user_type_mapping/
│       │   │       │   │   ├── dao/
│       │   │       │   │   │   ├── internal/
│       │   │       │   │   │   │   └── table_user.go
│       │   │       │   │   │   └── table_user.go
│       │   │       │   │   └── model/
│       │   │       │   │       ├── do/
│       │   │       │   │       │   └── table_user.go
│       │   │       │   │       └── entity/
│       │   │       │   │           └── table_user.go
│       │   │       │   ├── go.mod.txt
│       │   │       │   ├── sharding/
│       │   │       │   │   ├── sharding.sql
│       │   │       │   │   └── sharding_overlapping.sql
│       │   │       │   ├── sqlite3/
│       │   │       │   │   └── user.sqlite3.sql
│       │   │       │   ├── tables_pattern.sql
│       │   │       │   └── user.tpl.sql
│       │   │       ├── genpb/
│       │   │       │   ├── multiple_tags.proto
│       │   │       │   └── nested_message.proto
│       │   │       ├── genpbentity/
│       │   │       │   ├── generated/
│       │   │       │   │   ├── table_user.proto
│       │   │       │   │   └── table_user_snake_screaming.proto
│       │   │       │   └── user.tpl.sql
│       │   │       ├── genservice/
│       │   │       │   ├── logic/
│       │   │       │   │   ├── article/
│       │   │       │   │   │   ├── article.go
│       │   │       │   │   │   └── article_extra.go
│       │   │       │   │   ├── base/
│       │   │       │   │   │   ├── base.go
│       │   │       │   │   │   ├── base_destory.go
│       │   │       │   │   │   └── sub/
│       │   │       │   │   │       └── sub.go
│       │   │       │   │   ├── delivery/
│       │   │       │   │   │   ├── delivery_app.go
│       │   │       │   │   │   └── delivery_cluster.go
│       │   │       │   │   ├── logic_expect.go
│       │   │       │   │   └── user/
│       │   │       │   │       ├── supper_vip_user.go
│       │   │       │   │       ├── user.go
│       │   │       │   │       └── vip_user.go
│       │   │       │   └── service/
│       │   │       │       ├── article.go
│       │   │       │       ├── base.go
│       │   │       │       ├── delivery.go
│       │   │       │       └── user.go
│       │   │       └── issue/
│       │   │           ├── 2572/
│       │   │           │   ├── config.yaml
│       │   │           │   ├── dao/
│       │   │           │   │   ├── internal/
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   ├── user_3.go
│       │   │           │   │   └── user_4.go
│       │   │           │   ├── model/
│       │   │           │   │   ├── do/
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   └── entity/
│       │   │           │   │       ├── user_3.go
│       │   │           │   │       └── user_4.go
│       │   │           │   ├── sql1.sql
│       │   │           │   └── sql2.sql
│       │   │           ├── 2616/
│       │   │           │   ├── config.yaml
│       │   │           │   ├── dao/
│       │   │           │   │   ├── internal/
│       │   │           │   │   │   ├── user_1.go
│       │   │           │   │   │   ├── user_2.go
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   ├── user_1.go
│       │   │           │   │   ├── user_2.go
│       │   │           │   │   ├── user_3.go
│       │   │           │   │   └── user_4.go
│       │   │           │   ├── model/
│       │   │           │   │   ├── do/
│       │   │           │   │   │   ├── user_3.go
│       │   │           │   │   │   └── user_4.go
│       │   │           │   │   └── entity/
│       │   │           │   │       ├── user_3.go
│       │   │           │   │       └── user_4.go
│       │   │           │   ├── sql1.sql
│       │   │           │   └── sql2.sql
│       │   │           ├── 2746/
│       │   │           │   ├── issue_2746.go
│       │   │           │   └── sql.sql
│       │   │           ├── 3328/
│       │   │           │   └── logic/
│       │   │           │       └── .gitkeep
│       │   │           ├── 3459/
│       │   │           │   └── config.yaml
│       │   │           ├── 3460/
│       │   │           │   ├── api/
│       │   │           │   │   └── hello/
│       │   │           │   │       ├── hello.go
│       │   │           │   │       ├── v1/
│       │   │           │   │       │   └── req.go
│       │   │           │   │       └── v2/
│       │   │           │   │           └── req.go
│       │   │           │   └── controller/
│       │   │           │       └── hello/
│       │   │           │           ├── hello.go
│       │   │           │           ├── hello_new.go
│       │   │           │           ├── hello_v1_req.go
│       │   │           │           └── hello_v2_req.go
│       │   │           ├── 3545/
│       │   │           │   └── table_user.proto
│       │   │           ├── 3685/
│       │   │           │   ├── table_user.proto
│       │   │           │   └── user.tpl.sql
│       │   │           ├── 3749/
│       │   │           │   ├── dao/
│       │   │           │   │   ├── internal/
│       │   │           │   │   │   └── table_user.go
│       │   │           │   │   └── table_user.go
│       │   │           │   ├── model/
│       │   │           │   │   ├── do/
│       │   │           │   │   │   └── table_user.go
│       │   │           │   │   └── entity/
│       │   │           │   │       └── table_user.go
│       │   │           │   └── user.tpl.sql
│       │   │           ├── 3835/
│       │   │           │   ├── logic/
│       │   │           │   │   ├── issue3835/
│       │   │           │   │   │   └── issue3835.go
│       │   │           │   │   └── logic.go
│       │   │           │   └── service/
│       │   │           │       └── issue_3835.go
│       │   │           ├── 3882/
│       │   │           │   └── issue3882.proto
│       │   │           ├── 3953/
│       │   │           │   └── issue3953.proto
│       │   │           ├── 4242/
│       │   │           │   ├── logic/
│       │   │           │   │   ├── issue4242/
│       │   │           │   │   │   └── issue4242.go
│       │   │           │   │   ├── issue4242alias/
│       │   │           │   │   │   └── issue4242alias.go
│       │   │           │   │   └── logic.go
│       │   │           │   └── service/
│       │   │           │       ├── issue_4242.go
│       │   │           │       └── issue_4242_alias.go
│       │   │           ├── 4330/
│       │   │           │   ├── issue4330_double.proto
│       │   │           │   └── issue4330_string.proto
│       │   │           └── 4387/
│       │   │               ├── api/
│       │   │               │   └── types.go
│       │   │               ├── go.mod
│       │   │               └── go.sum
│       │   ├── consts/
│       │   │   ├── consts.go
│       │   │   ├── consts_gen_ctrl_template.go
│       │   │   ├── consts_gen_ctrl_template_sdk.go
│       │   │   ├── consts_gen_dao_template_dao.go
│       │   │   ├── consts_gen_dao_template_do.go
│       │   │   ├── consts_gen_dao_template_entity.go
│       │   │   ├── consts_gen_dao_template_table.go
│       │   │   ├── consts_gen_enums_template.go
│       │   │   ├── consts_gen_pbentity_template.go
│       │   │   ├── consts_gen_service_template.go
│       │   │   └── consts_gen_service_template_logic.go
│       │   ├── packed/
│       │   │   ├── packed.go
│       │   │   ├── template-mono-app.go
│       │   │   ├── template-mono.go
│       │   │   └── template-single.go
│       │   ├── service/
│       │   │   └── install.go
│       │   └── utility/
│       │       ├── allyes/
│       │       │   └── allyes.go
│       │       ├── mlog/
│       │       │   └── mlog.go
│       │       └── utils/
│       │           ├── utils.go
│       │           ├── utils_http_download.go
│       │           └── utils_test.go
│       ├── main.go
│       └── test/
│           └── testdata/
│               ├── tpls/
│               │   ├── tpl1.yaml
│               │   └── tpl2.sql
│               └── values.json
├── container/
│   ├── garray/
│   │   ├── garray.go
│   │   ├── garray_func.go
│   │   ├── garray_normal_any.go
│   │   ├── garray_normal_int.go
│   │   ├── garray_normal_str.go
│   │   ├── garray_normal_t.go
│   │   ├── garray_sorted_any.go
│   │   ├── garray_sorted_int.go
│   │   ├── garray_sorted_str.go
│   │   ├── garray_sorted_t.go
│   │   ├── garray_z_bench_any_test.go
│   │   ├── garray_z_example_normal_any_test.go
│   │   ├── garray_z_example_normal_int_test.go
│   │   ├── garray_z_example_normal_str_test.go
│   │   ├── garray_z_example_normal_t_test.go
│   │   ├── garray_z_example_sorted_str_test.go
│   │   ├── garray_z_example_sorted_t_test.go
│   │   ├── garray_z_unit_all_basic_test.go
│   │   ├── garray_z_unit_normal_any_test.go
│   │   ├── garray_z_unit_normal_int_test.go
│   │   ├── garray_z_unit_normal_str_test.go
│   │   ├── garray_z_unit_normal_t_test.go
│   │   ├── garray_z_unit_sorted_any_test.go
│   │   ├── garray_z_unit_sorted_int_test.go
│   │   ├── garray_z_unit_sorted_str_test.go
│   │   └── garray_z_unit_sorted_t_test.go
│   ├── glist/
│   │   ├── glist.go
│   │   ├── glist_t.go
│   │   ├── glist_z_bench_t_test.go
│   │   ├── glist_z_bench_test.go
│   │   ├── glist_z_example_t_test.go
│   │   ├── glist_z_example_test.go
│   │   ├── glist_z_unit_t_test.go
│   │   └── glist_z_unit_test.go
│   ├── gmap/
│   │   ├── gmap.go
│   │   ├── gmap_hash_any_any_map.go
│   │   ├── gmap_hash_int_any_map.go
│   │   ├── gmap_hash_int_int_map.go
│   │   ├── gmap_hash_int_str_map.go
│   │   ├── gmap_hash_k_v_map.go
│   │   ├── gmap_hash_str_any_map.go
│   │   ├── gmap_hash_str_int_map.go
│   │   ├── gmap_hash_str_str_map.go
│   │   ├── gmap_list_k_v_map.go
│   │   ├── gmap_list_map.go
│   │   ├── gmap_tree_k_v_map.go
│   │   ├── gmap_tree_map.go
│   │   ├── gmap_z_basic_test.go
│   │   ├── gmap_z_bench_maps_test.go
│   │   ├── gmap_z_bench_safe_test.go
│   │   ├── gmap_z_bench_syncmap_test.go
│   │   ├── gmap_z_bench_unsafe_test.go
│   │   ├── gmap_z_example_any_any_test.go
│   │   ├── gmap_z_example_int_any_test.go
│   │   ├── gmap_z_example_int_int_test.go
│   │   ├── gmap_z_example_list_test.go
│   │   ├── gmap_z_example_str_any_test.go
│   │   ├── gmap_z_example_str_int_test.go
│   │   ├── gmap_z_example_str_str_test.go
│   │   ├── gmap_z_example_test.go
│   │   ├── gmap_z_unit_hash_any_any_test.go
│   │   ├── gmap_z_unit_hash_int_any_test.go
│   │   ├── gmap_z_unit_hash_int_int_test.go
│   │   ├── gmap_z_unit_hash_int_str_test.go
│   │   ├── gmap_z_unit_hash_str_any_test.go
│   │   ├── gmap_z_unit_hash_str_int_test.go
│   │   ├── gmap_z_unit_hash_str_str_test.go
│   │   ├── gmap_z_unit_k_v_map_test.go
│   │   ├── gmap_z_unit_list_k_v_map_race_test.go
│   │   ├── gmap_z_unit_list_k_v_map_test.go
│   │   ├── gmap_z_unit_list_map_test.go
│   │   └── gmap_z_unit_tree_map_test.go
│   ├── gpool/
│   │   ├── gpool.go
│   │   ├── gpool_bench_test.go
│   │   ├── gpool_t.go
│   │   ├── gpool_z_example_test.go
│   │   ├── gpool_z_unit_generic_test.go
│   │   └── gpool_z_unit_test.go
│   ├── gqueue/
│   │   ├── gqueue.go
│   │   ├── gqueue_t.go
│   │   ├── gqueue_z_bench_test.go
│   │   ├── gqueue_z_example_test.go
│   │   └── gqueue_z_unit_test.go
│   ├── gring/
│   │   ├── gring.go
│   │   ├── gring_t.go
│   │   ├── gring_z_bench_test.go
│   │   ├── gring_z_example_test.go
│   │   └── gring_z_unit_test.go
│   ├── gset/
│   │   ├── gset_any_set.go
│   │   ├── gset_int_set.go
│   │   ├── gset_str_set.go
│   │   ├── gset_t_set.go
│   │   ├── gset_z_bench_test.go
│   │   ├── gset_z_example_any_test.go
│   │   ├── gset_z_example_int_test.go
│   │   ├── gset_z_example_str_test.go
│   │   ├── gset_z_unit_any_test.go
│   │   ├── gset_z_unit_int_test.go
│   │   ├── gset_z_unit_str_test.go
│   │   └── gset_z_unit_t_set_test.go
│   ├── gtree/
│   │   ├── gtree.go
│   │   ├── gtree_avltree.go
│   │   ├── gtree_btree.go
│   │   ├── gtree_k_v_avltree.go
│   │   ├── gtree_k_v_btree.go
│   │   ├── gtree_k_v_redblacktree.go
│   │   ├── gtree_redblacktree.go
│   │   ├── gtree_z_avl_tree_test.go
│   │   ├── gtree_z_b_tree_test.go
│   │   ├── gtree_z_example_avltree_test.go
│   │   ├── gtree_z_example_btree_test.go
│   │   ├── gtree_z_example_redblacktree_test.go
│   │   ├── gtree_z_example_test.go
│   │   ├── gtree_z_k_v_tree_test.go
│   │   └── gtree_z_redblack_tree_test.go
│   ├── gtype/
│   │   ├── gtype.go
│   │   ├── gtype_any.go
│   │   ├── gtype_bool.go
│   │   ├── gtype_byte.go
│   │   ├── gtype_bytes.go
│   │   ├── gtype_float32.go
│   │   ├── gtype_float64.go
│   │   ├── gtype_int.go
│   │   ├── gtype_int32.go
│   │   ├── gtype_int64.go
│   │   ├── gtype_interface.go
│   │   ├── gtype_string.go
│   │   ├── gtype_uint.go
│   │   ├── gtype_uint32.go
│   │   ├── gtype_uint64.go
│   │   ├── gtype_z_bench_basic_test.go
│   │   ├── gtype_z_bench_json_test.go
│   │   ├── gtype_z_unit_any_test.go
│   │   ├── gtype_z_unit_bool_test.go
│   │   ├── gtype_z_unit_byte_test.go
│   │   ├── gtype_z_unit_bytes_test.go
│   │   ├── gtype_z_unit_float32_test.go
│   │   ├── gtype_z_unit_float64_test.go
│   │   ├── gtype_z_unit_int32_test.go
│   │   ├── gtype_z_unit_int64_test.go
│   │   ├── gtype_z_unit_int_test.go
│   │   ├── gtype_z_unit_interface_test.go
│   │   ├── gtype_z_unit_string_test.go
│   │   ├── gtype_z_unit_uint32_test.go
│   │   ├── gtype_z_unit_uint64_test.go
│   │   └── gtype_z_unit_uint_test.go
│   └── gvar/
│       ├── gvar.go
│       ├── gvar_basic.go
│       ├── gvar_copy.go
│       ├── gvar_is.go
│       ├── gvar_list.go
│       ├── gvar_map.go
│       ├── gvar_scan.go
│       ├── gvar_set.go
│       ├── gvar_slice.go
│       ├── gvar_struct.go
│       ├── gvar_time.go
│       ├── gvar_vars.go
│       ├── gvar_z_bench_ptr_test.go
│       ├── gvar_z_example_test.go
│       ├── gvar_z_unit_basic_test.go
│       ├── gvar_z_unit_is_test.go
│       ├── gvar_z_unit_json_test.go
│       ├── gvar_z_unit_list_test.go
│       ├── gvar_z_unit_map_test.go
│       ├── gvar_z_unit_slice_test.go
│       ├── gvar_z_unit_struct_test.go
│       └── gvar_z_unit_vars_test.go
├── contrib/
│   ├── config/
│   │   ├── README.MD
│   │   ├── apollo/
│   │   │   ├── README.MD
│   │   │   ├── apollo.go
│   │   │   ├── apollo_adapter_ctx.go
│   │   │   ├── apollo_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── consul/
│   │   │   ├── README.md
│   │   │   ├── consul.go
│   │   │   ├── consul_adapter_ctx.go
│   │   │   ├── consul_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── kubecm/
│   │   │   ├── README.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── kubecm.go
│   │   │   ├── kubecm_adapter_ctx.go
│   │   │   ├── kubecm_kube.go
│   │   │   ├── kubecm_test.go
│   │   │   └── testdata/
│   │   │       └── configmap.yaml
│   │   ├── nacos/
│   │   │   ├── README.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── nacos.go
│   │   │   ├── nacos_adapter_ctx.go
│   │   │   └── nacos_test.go
│   │   └── polaris/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── polaris.go
│   │       └── polaris_adapter_ctx.go
│   ├── drivers/
│   │   ├── README.MD
│   │   ├── clickhouse/
│   │   │   ├── clickhouse.go
│   │   │   ├── clickhouse_convert.go
│   │   │   ├── clickhouse_do_commit.go
│   │   │   ├── clickhouse_do_delete.go
│   │   │   ├── clickhouse_do_filter.go
│   │   │   ├── clickhouse_do_insert.go
│   │   │   ├── clickhouse_do_update.go
│   │   │   ├── clickhouse_insert.go
│   │   │   ├── clickhouse_open.go
│   │   │   ├── clickhouse_ping.go
│   │   │   ├── clickhouse_table_fields.go
│   │   │   ├── clickhouse_tables.go
│   │   │   ├── clickhouse_transaction.go
│   │   │   ├── clickhouse_z_unit_db_test.go
│   │   │   ├── clickhouse_z_unit_init_test.go
│   │   │   ├── clickhouse_z_unit_issue_test.go
│   │   │   ├── clickhouse_z_unit_model_test.go
│   │   │   ├── clickhouse_z_unit_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── dm/
│   │   │   ├── dm.go
│   │   │   ├── dm_convert.go
│   │   │   ├── dm_do_filter.go
│   │   │   ├── dm_do_insert.go
│   │   │   ├── dm_do_query.go
│   │   │   ├── dm_open.go
│   │   │   ├── dm_table_fields.go
│   │   │   ├── dm_tables.go
│   │   │   ├── dm_z_unit_basic_test.go
│   │   │   ├── dm_z_unit_feature_soft_time_test.go
│   │   │   ├── dm_z_unit_init_test.go
│   │   │   ├── dm_z_unit_issue_test.go
│   │   │   ├── dm_z_unit_model_test.go
│   │   │   ├── dm_z_unit_pr_test.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── testdata/
│   │   │       └── issue/
│   │   │           └── 2594/
│   │   │               └── sql.sql
│   │   ├── gaussdb/
│   │   │   ├── gaussdb.go
│   │   │   ├── gaussdb_convert.go
│   │   │   ├── gaussdb_do_exec.go
│   │   │   ├── gaussdb_do_filter.go
│   │   │   ├── gaussdb_do_insert.go
│   │   │   ├── gaussdb_open.go
│   │   │   ├── gaussdb_order.go
│   │   │   ├── gaussdb_result.go
│   │   │   ├── gaussdb_table_fields.go
│   │   │   ├── gaussdb_tables.go
│   │   │   ├── gaussdb_z_unit_db_test.go
│   │   │   ├── gaussdb_z_unit_feature_ctx_test.go
│   │   │   ├── gaussdb_z_unit_feature_hook_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_builder_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_do_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_join_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_struct_test.go
│   │   │   ├── gaussdb_z_unit_feature_model_subquery_test.go
│   │   │   ├── gaussdb_z_unit_feature_scanlist_test.go
│   │   │   ├── gaussdb_z_unit_feature_soft_time_test.go
│   │   │   ├── gaussdb_z_unit_feature_union_test.go
│   │   │   ├── gaussdb_z_unit_feature_with_test.go
│   │   │   ├── gaussdb_z_unit_field_test.go
│   │   │   ├── gaussdb_z_unit_filter_test.go
│   │   │   ├── gaussdb_z_unit_init_test.go
│   │   │   ├── gaussdb_z_unit_model_test.go
│   │   │   ├── gaussdb_z_unit_model_where_test.go
│   │   │   ├── gaussdb_z_unit_open_test.go
│   │   │   ├── gaussdb_z_unit_raw_test.go
│   │   │   ├── gaussdb_z_unit_test.go
│   │   │   ├── gaussdb_z_unit_transaction_test.go
│   │   │   ├── gaussdb_z_unit_upsert_test.go
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── testdata/
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── mariadb/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── mariadb.go
│   │   │   ├── mariadb_table_fields.go
│   │   │   ├── mariadb_unit_init_test.go
│   │   │   ├── mariadb_unit_model_test.go
│   │   │   ├── mariadb_z_unit_feature_batch_test.go
│   │   │   ├── mariadb_z_unit_feature_cache_test.go
│   │   │   ├── mariadb_z_unit_feature_concurrent_test.go
│   │   │   ├── mariadb_z_unit_feature_ctx_test.go
│   │   │   ├── mariadb_z_unit_feature_error_handling_test.go
│   │   │   ├── mariadb_z_unit_feature_hook_test.go
│   │   │   ├── mariadb_z_unit_feature_model_builder_test.go
│   │   │   ├── mariadb_z_unit_feature_model_do_test.go
│   │   │   ├── mariadb_z_unit_feature_model_join_test.go
│   │   │   ├── mariadb_z_unit_feature_model_sharding_test.go
│   │   │   ├── mariadb_z_unit_feature_model_struct_test.go
│   │   │   ├── mariadb_z_unit_feature_model_subquery_test.go
│   │   │   ├── mariadb_z_unit_feature_omit_test.go
│   │   │   ├── mariadb_z_unit_feature_pagination_test.go
│   │   │   ├── mariadb_z_unit_feature_raw_type_test.go
│   │   │   ├── mariadb_z_unit_feature_scanlist_test.go
│   │   │   ├── mariadb_z_unit_feature_soft_time_test.go
│   │   │   ├── mariadb_z_unit_feature_union_test.go
│   │   │   ├── mariadb_z_unit_feature_with_test.go
│   │   │   ├── mariadb_z_unit_model_where_test.go
│   │   │   ├── mariadb_z_unit_transaction_test.go
│   │   │   └── testdata/
│   │   │       ├── fix_gdb_join.sql
│   │   │       ├── fix_gdb_join_expect.sql
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── mssql/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── mssql.go
│   │   │   ├── mssql_do_commit.go
│   │   │   ├── mssql_do_exec.go
│   │   │   ├── mssql_do_filter.go
│   │   │   ├── mssql_do_filter_test.go
│   │   │   ├── mssql_do_insert.go
│   │   │   ├── mssql_open.go
│   │   │   ├── mssql_result.go
│   │   │   ├── mssql_table_fields.go
│   │   │   ├── mssql_tables.go
│   │   │   ├── mssql_z_unit_basic_test.go
│   │   │   ├── mssql_z_unit_init_test.go
│   │   │   ├── mssql_z_unit_model_test.go
│   │   │   └── mssql_z_unit_transaction_test.go
│   │   ├── mysql/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── mysql.go
│   │   │   ├── mysql_do_filter.go
│   │   │   ├── mysql_open.go
│   │   │   ├── mysql_table_fields.go
│   │   │   ├── mysql_tables.go
│   │   │   ├── mysql_z_unit_basic_test.go
│   │   │   ├── mysql_z_unit_core_bench_test.go
│   │   │   ├── mysql_z_unit_core_test.go
│   │   │   ├── mysql_z_unit_feature_batch_test.go
│   │   │   ├── mysql_z_unit_feature_cache_test.go
│   │   │   ├── mysql_z_unit_feature_concurrent_test.go
│   │   │   ├── mysql_z_unit_feature_ctx_test.go
│   │   │   ├── mysql_z_unit_feature_duplicate_test.go
│   │   │   ├── mysql_z_unit_feature_error_handling_test.go
│   │   │   ├── mysql_z_unit_feature_hook_test.go
│   │   │   ├── mysql_z_unit_feature_json_test.go
│   │   │   ├── mysql_z_unit_feature_lock_test.go
│   │   │   ├── mysql_z_unit_feature_master_slave_test.go
│   │   │   ├── mysql_z_unit_feature_metadata_test.go
│   │   │   ├── mysql_z_unit_feature_model_builder_test.go
│   │   │   ├── mysql_z_unit_feature_model_do_test.go
│   │   │   ├── mysql_z_unit_feature_model_join_test.go
│   │   │   ├── mysql_z_unit_feature_model_sharding_test.go
│   │   │   ├── mysql_z_unit_feature_model_struct_test.go
│   │   │   ├── mysql_z_unit_feature_model_subquery_test.go
│   │   │   ├── mysql_z_unit_feature_omit_test.go
│   │   │   ├── mysql_z_unit_feature_pagination_test.go
│   │   │   ├── mysql_z_unit_feature_partition_test.go
│   │   │   ├── mysql_z_unit_feature_raw_type_test.go
│   │   │   ├── mysql_z_unit_feature_scanlist_test.go
│   │   │   ├── mysql_z_unit_feature_soft_time_test.go
│   │   │   ├── mysql_z_unit_feature_union_test.go
│   │   │   ├── mysql_z_unit_feature_with_test.go
│   │   │   ├── mysql_z_unit_init_test.go
│   │   │   ├── mysql_z_unit_internal_test.go
│   │   │   ├── mysql_z_unit_issue_test.go
│   │   │   ├── mysql_z_unit_model_test.go
│   │   │   ├── mysql_z_unit_model_where_test.go
│   │   │   ├── mysql_z_unit_transaction_test.go
│   │   │   └── testdata/
│   │   │       ├── date_time_example.sql
│   │   │       ├── fix_gdb_join.sql
│   │   │       ├── fix_gdb_join_expect.sql
│   │   │       ├── fix_gdb_order_by.sql
│   │   │       ├── issues/
│   │   │       │   ├── 1380.sql
│   │   │       │   ├── 1401.sql
│   │   │       │   ├── 1412.sql
│   │   │       │   ├── 2105.sql
│   │   │       │   ├── 2119.sql
│   │   │       │   ├── 2439.sql
│   │   │       │   ├── 2643.sql
│   │   │       │   ├── 3086.sql
│   │   │       │   ├── 3218.sql
│   │   │       │   ├── 3626.sql
│   │   │       │   ├── 3754.sql
│   │   │       │   ├── 3915.sql
│   │   │       │   ├── 4034.sql
│   │   │       │   └── 4086.sql
│   │   │       ├── reservedwords_table_tpl.sql
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── oceanbase/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── oceanbase.go
│   │   ├── oracle/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── oracle.go
│   │   │   ├── oracle_do_commit.go
│   │   │   ├── oracle_do_exec.go
│   │   │   ├── oracle_do_filter.go
│   │   │   ├── oracle_do_insert.go
│   │   │   ├── oracle_open.go
│   │   │   ├── oracle_order.go
│   │   │   ├── oracle_result.go
│   │   │   ├── oracle_table_fields.go
│   │   │   ├── oracle_tables.go
│   │   │   ├── oracle_z_unit_basic_test.go
│   │   │   ├── oracle_z_unit_init_test.go
│   │   │   └── oracle_z_unit_model_test.go
│   │   ├── pgsql/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── pgsql.go
│   │   │   ├── pgsql_convert.go
│   │   │   ├── pgsql_do_exec.go
│   │   │   ├── pgsql_do_filter.go
│   │   │   ├── pgsql_do_insert.go
│   │   │   ├── pgsql_format_upsert.go
│   │   │   ├── pgsql_open.go
│   │   │   ├── pgsql_order.go
│   │   │   ├── pgsql_result.go
│   │   │   ├── pgsql_table_fields.go
│   │   │   ├── pgsql_tables.go
│   │   │   ├── pgsql_z_unit_convert_test.go
│   │   │   ├── pgsql_z_unit_db_test.go
│   │   │   ├── pgsql_z_unit_feature_ctx_test.go
│   │   │   ├── pgsql_z_unit_feature_hook_test.go
│   │   │   ├── pgsql_z_unit_feature_model_builder_test.go
│   │   │   ├── pgsql_z_unit_feature_model_do_test.go
│   │   │   ├── pgsql_z_unit_feature_model_join_test.go
│   │   │   ├── pgsql_z_unit_feature_model_struct_test.go
│   │   │   ├── pgsql_z_unit_feature_model_subquery_test.go
│   │   │   ├── pgsql_z_unit_feature_scanlist_test.go
│   │   │   ├── pgsql_z_unit_feature_soft_time_test.go
│   │   │   ├── pgsql_z_unit_feature_union_test.go
│   │   │   ├── pgsql_z_unit_feature_with_test.go
│   │   │   ├── pgsql_z_unit_field_test.go
│   │   │   ├── pgsql_z_unit_filter_test.go
│   │   │   ├── pgsql_z_unit_init_test.go
│   │   │   ├── pgsql_z_unit_issue_test.go
│   │   │   ├── pgsql_z_unit_model_test.go
│   │   │   ├── pgsql_z_unit_model_where_test.go
│   │   │   ├── pgsql_z_unit_open_test.go
│   │   │   ├── pgsql_z_unit_raw_test.go
│   │   │   ├── pgsql_z_unit_test.go
│   │   │   ├── pgsql_z_unit_transaction_test.go
│   │   │   ├── pgsql_z_unit_upsert_test.go
│   │   │   └── testdata/
│   │   │       ├── issues/
│   │   │       │   ├── issue3632.sql
│   │   │       │   ├── issue3668.sql
│   │   │       │   ├── issue3671.sql
│   │   │       │   └── issue4033.sql
│   │   │       ├── table_with_prefix.sql
│   │   │       ├── with_multiple_depends.sql
│   │   │       ├── with_tpl_user.sql
│   │   │       ├── with_tpl_user_detail.sql
│   │   │       └── with_tpl_user_scores.sql
│   │   ├── sqlite/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── sqlite.go
│   │   │   ├── sqlite_do_filter.go
│   │   │   ├── sqlite_format_upsert.go
│   │   │   ├── sqlite_open.go
│   │   │   ├── sqlite_order.go
│   │   │   ├── sqlite_table_fields.go
│   │   │   ├── sqlite_tables.go
│   │   │   ├── sqlite_z_unit_core_test.go
│   │   │   ├── sqlite_z_unit_init_test.go
│   │   │   └── sqlite_z_unit_model_test.go
│   │   ├── sqlitecgo/
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── sqlitecgo.go
│   │   │   ├── sqlitecgo_do_filter.go
│   │   │   ├── sqlitecgo_format_upsert.go
│   │   │   ├── sqlitecgo_open.go
│   │   │   ├── sqlitecgo_table_fields.go
│   │   │   ├── sqlitecgo_tables.go
│   │   │   ├── sqlitecgo_z_unit_core_test.go
│   │   │   ├── sqlitecgo_z_unit_init_test.go
│   │   │   └── sqlitecgo_z_unit_model_test.go
│   │   └── tidb/
│   │       ├── go.mod
│   │       ├── go.sum
│   │       └── tidb.go
│   ├── metric/
│   │   └── otelmetric/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── otelmetric.go
│   │       ├── otelmetric_callback.go
│   │       ├── otelmetric_meter_counter_performer.go
│   │       ├── otelmetric_meter_histogram_performer.go
│   │       ├── otelmetric_meter_observable_counter_performer.go
│   │       ├── otelmetric_meter_observable_gauge_performer.go
│   │       ├── otelmetric_meter_observable_updown_counter_performer.go
│   │       ├── otelmetric_meter_performer.go
│   │       ├── otelmetric_meter_updown_counter_performer.go
│   │       ├── otelmetric_metric_callback.go
│   │       ├── otelmetric_option.go
│   │       ├── otelmetric_prometheus.go
│   │       ├── otelmetric_provider.go
│   │       ├── otelmetric_util.go
│   │       ├── otelmetric_z_unit_http_test.go
│   │       ├── otelmetric_z_unit_test.go
│   │       └── testdata/
│   │           └── http.prometheus.metrics.txt
│   ├── nosql/
│   │   └── redis/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── redis.go
│   │       ├── redis_conn.go
│   │       ├── redis_func.go
│   │       ├── redis_group_generic.go
│   │       ├── redis_group_hash.go
│   │       ├── redis_group_list.go
│   │       ├── redis_group_pubsub.go
│   │       ├── redis_group_script.go
│   │       ├── redis_group_set.go
│   │       ├── redis_group_sorted_set.go
│   │       ├── redis_group_string.go
│   │       ├── redis_operation.go
│   │       ├── redis_test.go
│   │       ├── redis_z_func_test.go
│   │       ├── redis_z_group_generic_test.go
│   │       ├── redis_z_group_hash_test.go
│   │       ├── redis_z_group_list_test.go
│   │       ├── redis_z_group_pubsub_test.go
│   │       ├── redis_z_group_script_test.go
│   │       ├── redis_z_group_set_test.go
│   │       ├── redis_z_group_sorted_set_test.go
│   │       ├── redis_z_group_string_test.go
│   │       ├── redis_z_unit_config_test.go
│   │       ├── redis_z_unit_conn_sentinel_test.go
│   │       ├── redis_z_unit_conn_test.go
│   │       ├── redis_z_unit_gcache_adapter_test.go
│   │       ├── redis_z_unit_gins_redis_test.go
│   │       ├── redis_z_unit_test.go
│   │       └── testdata/
│   │           └── redis/
│   │               └── config.toml
│   ├── registry/
│   │   ├── README.MD
│   │   ├── consul/
│   │   │   ├── README.MD
│   │   │   ├── consul.go
│   │   │   ├── consul_discovery.go
│   │   │   ├── consul_test.go
│   │   │   ├── consul_watcher.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── etcd/
│   │   │   ├── README.MD
│   │   │   ├── etcd.go
│   │   │   ├── etcd_discovery.go
│   │   │   ├── etcd_registrar.go
│   │   │   ├── etcd_service.go
│   │   │   ├── etcd_watcher.go
│   │   │   ├── etcd_z_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── file/
│   │   │   ├── README.MD
│   │   │   ├── file.go
│   │   │   ├── file_discovery.go
│   │   │   ├── file_registrar.go
│   │   │   ├── file_service.go
│   │   │   ├── file_watcher.go
│   │   │   ├── file_z_basic_test.go
│   │   │   ├── file_z_http_test.go
│   │   │   ├── go.mod
│   │   │   └── go.sum
│   │   ├── nacos/
│   │   │   ├── README.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── nacos.go
│   │   │   ├── nacos_discovery.go
│   │   │   ├── nacos_register.go
│   │   │   ├── nacos_service.go
│   │   │   ├── nacos_watcher.go
│   │   │   └── nacos_z_test.go
│   │   ├── polaris/
│   │   │   ├── README.MD
│   │   │   ├── README_ZH.MD
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   ├── polaris.go
│   │   │   ├── polaris_discovery.go
│   │   │   ├── polaris_registry.go
│   │   │   ├── polaris_service.go
│   │   │   ├── polaris_watcher.go
│   │   │   └── polaris_z_test.go
│   │   └── zookeeper/
│   │       ├── README.MD
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── zookeeper.go
│   │       ├── zookeeper_discovery.go
│   │       ├── zookeeper_func.go
│   │       ├── zookeeper_registrar.go
│   │       ├── zookeeper_watcher.go
│   │       └── zookeeper_z_test.go
│   ├── rpc/
│   │   └── grpcx/
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── grpcx.go
│   │       ├── grpcx_grpc_client.go
│   │       ├── grpcx_grpc_server.go
│   │       ├── grpcx_grpc_server_config.go
│   │       ├── grpcx_grpc_server_unary.go
│   │       ├── grpcx_interceptor_client.go
│   │       ├── grpcx_interceptor_server.go
│   │       ├── grpcx_registry_file.go
│   │       ├── grpcx_unit_z_ctx_test.go
│   │       ├── grpcx_unit_z_grpc_server_basic_test.go
│   │       ├── grpcx_unit_z_grpc_server_config_test.go
│   │       ├── grpcx_unit_z_issue_test.go
│   │       ├── internal/
│   │       │   ├── balancer/
│   │       │   │   ├── balancer.go
│   │       │   │   ├── balancer_builder.go
│   │       │   │   ├── balancer_node.go
│   │       │   │   └── balancer_picker.go
│   │       │   ├── grpcctx/
│   │       │   │   └── grpcctx.go
│   │       │   ├── resolver/
│   │       │   │   ├── resolver.go
│   │       │   │   ├── resolver_builder.go
│   │       │   │   ├── resolver_manager.go
│   │       │   │   └── resolver_resolver.go
│   │       │   ├── tracing/
│   │       │   │   ├── tracing.go
│   │       │   │   ├── tracing_interceptor.go
│   │       │   │   ├── tracing_interceptor_client.go
│   │       │   │   └── tracing_interceptor_server.go
│   │       │   └── utils/
│   │       │       └── utils.go
│   │       └── testdata/
│   │           ├── configuration/
│   │           │   └── config.yaml
│   │           ├── controller/
│   │           │   └── helloworld.go
│   │           └── protobuf/
│   │               ├── helloworld.pb.go
│   │               ├── helloworld.proto
│   │               └── helloworld_grpc.pb.go
│   ├── sdk/
│   │   └── httpclient/
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── httpclient.go
│   │       ├── httpclient_config.go
│   │       ├── httpclient_handler.go
│   │       └── httpclient_z_unit_feature_handler_test.go
│   └── trace/
│       ├── otlpgrpc/
│       │   ├── go.mod
│       │   ├── go.sum
│       │   └── otlpgrpc.go
│       └── otlphttp/
│           ├── go.mod
│           ├── go.sum
│           └── otlphttp.go
├── crypto/
│   ├── gaes/
│   │   ├── gaes.go
│   │   └── gaes_z_unit_test.go
│   ├── gcrc32/
│   │   ├── gcrc32.go
│   │   └── gcrc32_z_unit_test.go
│   ├── gdes/
│   │   ├── gdes.go
│   │   └── gdes_z_unit_test.go
│   ├── gmd5/
│   │   ├── gmd5.go
│   │   └── gmd5_z_unit_test.go
│   ├── grsa/
│   │   ├── README.md
│   │   ├── grsa.go
│   │   └── grsa_z_unit_test.go
│   ├── gsha1/
│   │   ├── gsha1.go
│   │   └── gsha1_z_unit_test.go
│   ├── gsha256/
│   │   ├── gsha256.go
│   │   └── gsha256_z_unit_test.go
│   └── gsha512/
│       ├── gsha512.go
│       └── gsha512_z_unit_test.go
├── database/
│   ├── gdb/
│   │   ├── gdb.go
│   │   ├── gdb_converter.go
│   │   ├── gdb_core.go
│   │   ├── gdb_core_config.go
│   │   ├── gdb_core_ctx.go
│   │   ├── gdb_core_link.go
│   │   ├── gdb_core_stats.go
│   │   ├── gdb_core_structure.go
│   │   ├── gdb_core_trace.go
│   │   ├── gdb_core_transaction.go
│   │   ├── gdb_core_txcore.go
│   │   ├── gdb_core_underlying.go
│   │   ├── gdb_core_utility.go
│   │   ├── gdb_driver_default.go
│   │   ├── gdb_driver_wrapper.go
│   │   ├── gdb_driver_wrapper_db.go
│   │   ├── gdb_func.go
│   │   ├── gdb_model.go
│   │   ├── gdb_model_builder.go
│   │   ├── gdb_model_builder_where.go
│   │   ├── gdb_model_builder_where_prefix.go
│   │   ├── gdb_model_builder_whereor.go
│   │   ├── gdb_model_builder_whereor_prefix.go
│   │   ├── gdb_model_cache.go
│   │   ├── gdb_model_delete.go
│   │   ├── gdb_model_fields.go
│   │   ├── gdb_model_hook.go
│   │   ├── gdb_model_insert.go
│   │   ├── gdb_model_join.go
│   │   ├── gdb_model_lock.go
│   │   ├── gdb_model_option.go
│   │   ├── gdb_model_order_group.go
│   │   ├── gdb_model_select.go
│   │   ├── gdb_model_sharding.go
│   │   ├── gdb_model_soft_time.go
│   │   ├── gdb_model_transaction.go
│   │   ├── gdb_model_update.go
│   │   ├── gdb_model_utility.go
│   │   ├── gdb_model_where.go
│   │   ├── gdb_model_where_prefix.go
│   │   ├── gdb_model_whereor.go
│   │   ├── gdb_model_whereor_prefix.go
│   │   ├── gdb_model_with.go
│   │   ├── gdb_panic_recovery_test.go
│   │   ├── gdb_result.go
│   │   ├── gdb_schema.go
│   │   ├── gdb_statement.go
│   │   ├── gdb_type_record.go
│   │   ├── gdb_type_result.go
│   │   ├── gdb_type_result_scanlist.go
│   │   ├── gdb_z_core_config_external_test.go
│   │   ├── gdb_z_core_config_test.go
│   │   ├── gdb_z_example_test.go
│   │   ├── gdb_z_mysql_internal_test.go
│   │   ├── gdb_z_unit_issue_test.go
│   │   └── testdata/
│   │       ├── issue1380.sql
│   │       ├── issue1401.sql
│   │       ├── issue1412.sql
│   │       ├── reservedwords_table_tpl.sql
│   │       └── with_multiple_depends.sql
│   └── gredis/
│       ├── gredis.go
│       ├── gredis_adapter.go
│       ├── gredis_config.go
│       ├── gredis_instance.go
│       ├── gredis_redis.go
│       ├── gredis_redis_group_generic.go
│       ├── gredis_redis_group_hash.go
│       ├── gredis_redis_group_list.go
│       ├── gredis_redis_group_pubsub.go
│       ├── gredis_redis_group_script.go
│       ├── gredis_redis_group_set.go
│       ├── gredis_redis_group_sorted_set.go
│       └── gredis_redis_group_string.go
├── debug/
│   └── gdebug/
│       ├── gdebug.go
│       ├── gdebug_caller.go
│       ├── gdebug_grid.go
│       ├── gdebug_stack.go
│       ├── gdebug_version.go
│       ├── gdebug_z_bench_test.go
│       ├── gdebug_z_unit_internal_test.go
│       └── gdebug_z_unit_test.go
├── encoding/
│   ├── gbase64/
│   │   ├── gbase64.go
│   │   ├── gbase64_z_unit_test.go
│   │   └── testdata/
│   │       └── test
│   ├── gbinary/
│   │   ├── gbinary.go
│   │   ├── gbinary_be.go
│   │   ├── gbinary_bit.go
│   │   ├── gbinary_func.go
│   │   ├── gbinary_le.go
│   │   ├── gbinary_z_unit_be_test.go
│   │   ├── gbinary_z_unit_le_test.go
│   │   └── gbinary_z_unit_test.go
│   ├── gcharset/
│   │   ├── gcharset.go
│   │   └── gcharset_z_unit_test.go
│   ├── gcompress/
│   │   ├── gcompress.go
│   │   ├── gcompress_gzip.go
│   │   ├── gcompress_z_unit_gzip_test.go
│   │   ├── gcompress_z_unit_zip_test.go
│   │   ├── gcompress_z_unit_zlib_test.go
│   │   ├── gcompress_zip.go
│   │   ├── gcompress_zlib.go
│   │   └── testdata/
│   │       ├── gzip/
│   │       │   └── file.txt
│   │       └── zip/
│   │           ├── path1/
│   │           │   └── 1.txt
│   │           └── path2/
│   │               └── 2.txt
│   ├── ghash/
│   │   ├── ghash.go
│   │   ├── ghash_ap.go
│   │   ├── ghash_bkdr.go
│   │   ├── ghash_djb.go
│   │   ├── ghash_elf.go
│   │   ├── ghash_jshash.go
│   │   ├── ghash_pjw.go
│   │   ├── ghash_rs.go
│   │   ├── ghash_sdbm.go
│   │   ├── ghash_z_bench_test.go
│   │   └── ghash_z_unit_test.go
│   ├── ghtml/
│   │   ├── ghtml.go
│   │   └── ghtml_z_unit_test.go
│   ├── gini/
│   │   ├── gini.go
│   │   └── gini_z_unit_test.go
│   ├── gjson/
│   │   ├── gjson.go
│   │   ├── gjson_api.go
│   │   ├── gjson_api_config.go
│   │   ├── gjson_api_encoding.go
│   │   ├── gjson_api_new_load.go
│   │   ├── gjson_api_new_load_content.go
│   │   ├── gjson_api_new_load_path.go
│   │   ├── gjson_implements.go
│   │   ├── gjson_stdlib_json_util.go
│   │   ├── gjson_z_bench_test.go
│   │   ├── gjson_z_example_conversion_test.go
│   │   ├── gjson_z_example_dataset_test.go
│   │   ├── gjson_z_example_load_test.go
│   │   ├── gjson_z_example_new_test.go
│   │   ├── gjson_z_example_pattern_test.go
│   │   ├── gjson_z_example_test.go
│   │   ├── gjson_z_unit_feature_json_test.go
│   │   ├── gjson_z_unit_feature_load_test.go
│   │   ├── gjson_z_unit_feature_new_test.go
│   │   ├── gjson_z_unit_feature_set_test.go
│   │   ├── gjson_z_unit_feature_struct_test.go
│   │   ├── gjson_z_unit_implements_test.go
│   │   ├── gjson_z_unit_internal_test.go
│   │   ├── gjson_z_unit_test.go
│   │   └── testdata/
│   │       ├── json/
│   │       │   └── data1.json
│   │       ├── properties/
│   │       │   └── data1.properties
│   │       ├── toml/
│   │       │   └── data1.toml
│   │       ├── xml/
│   │       │   └── data1.xml
│   │       └── yaml/
│   │           ├── data1.yaml
│   │           └── i18n-issue.yaml
│   ├── gproperties/
│   │   ├── gproperties.go
│   │   └── gproperties_z_unit_test.go
│   ├── gtoml/
│   │   ├── gtoml.go
│   │   └── gtoml_z_unit_test.go
│   ├── gurl/
│   │   ├── url.go
│   │   └── url_z_unit_test.go
│   ├── gxml/
│   │   ├── gxml.go
│   │   └── gxml_z_unit_test.go
│   └── gyaml/
│       ├── gyaml.go
│       └── gyaml_z_unit_test.go
├── errors/
│   ├── gcode/
│   │   ├── gcode.go
│   │   ├── gcode_local.go
│   │   └── gcode_z_unit_test.go
│   └── gerror/
│       ├── gerror.go
│       ├── gerror_api.go
│       ├── gerror_api_code.go
│       ├── gerror_api_option.go
│       ├── gerror_api_stack.go
│       ├── gerror_error.go
│       ├── gerror_error_code.go
│       ├── gerror_error_format.go
│       ├── gerror_error_json.go
│       ├── gerror_error_stack.go
│       ├── gerror_z_bench_test.go
│       ├── gerror_z_example_test.go
│       └── gerror_z_unit_test.go
├── frame/
│   ├── g/
│   │   ├── g.go
│   │   ├── g_func.go
│   │   ├── g_object.go
│   │   ├── g_setting.go
│   │   ├── g_z_example_test.go
│   │   └── g_z_unit_test.go
│   └── gins/
│       ├── gins.go
│       ├── gins_config.go
│       ├── gins_database.go
│       ├── gins_httpclient.go
│       ├── gins_i18n.go
│       ├── gins_log.go
│       ├── gins_redis.go
│       ├── gins_resource.go
│       ├── gins_server.go
│       ├── gins_view.go
│       ├── gins_z_unit_config_test.go
│       ├── gins_z_unit_database_test.go
│       ├── gins_z_unit_httpclient_test.go
│       ├── gins_z_unit_server_test.go
│       ├── gins_z_unit_view_test.go
│       └── testdata/
│           ├── config/
│           │   └── config.toml
│           ├── database/
│           │   └── config.toml
│           ├── redis/
│           │   └── config.toml
│           ├── server/
│           │   └── config.yaml
│           ├── view1/
│           │   ├── config.toml
│           │   ├── test1.html
│           │   └── test2.html
│           └── view2/
│               ├── config.toml
│               └── test.html
├── go.mod
├── go.sum
├── i18n/
│   └── gi18n/
│       ├── gi18n.go
│       ├── gi18n_ctx.go
│       ├── gi18n_instance.go
│       ├── gi18n_manager.go
│       ├── gi18n_z_unit_test.go
│       └── testdata/
│           ├── i18n/
│           │   ├── en.toml
│           │   ├── ja.toml
│           │   ├── ru.toml
│           │   ├── zh-CN.json
│           │   └── zh-TW.toml
│           ├── i18n-dir/
│           │   ├── en/
│           │   │   ├── hello.toml
│           │   │   └── world.toml
│           │   ├── ja/
│           │   │   ├── hello.yaml
│           │   │   └── world.yaml
│           │   ├── ru/
│           │   │   ├── hello.ini
│           │   │   └── world.ini
│           │   ├── zh-CN/
│           │   │   ├── hello.json
│           │   │   └── world.json
│           │   └── zh-TW/
│           │       ├── hello.xml
│           │       └── world.xml
│           ├── i18n-file/
│           │   ├── en.toml
│           │   ├── ja.yaml
│           │   ├── ru.ini
│           │   ├── zh-CN.json
│           │   └── zh-TW.xml
│           └── issue-yaml/
│               └── zh.yaml
├── internal/
│   ├── command/
│   │   └── command.go
│   ├── consts/
│   │   └── consts.go
│   ├── deepcopy/
│   │   ├── deepcopy.go
│   │   └── deepcopy_test.go
│   ├── empty/
│   │   ├── empty.go
│   │   └── empty_z_unit_test.go
│   ├── errors/
│   │   ├── errors.go
│   │   └── errors_test.go
│   ├── fileinfo/
│   │   └── fileinfo.go
│   ├── httputil/
│   │   ├── httputils.go
│   │   └── httputils_test.go
│   ├── instance/
│   │   ├── instance.go
│   │   └── instance_test.go
│   ├── intlog/
│   │   └── intlog.go
│   ├── json/
│   │   └── json.go
│   ├── mutex/
│   │   ├── mutex.go
│   │   ├── mutex_z_bench_test.go
│   │   └── mutex_z_unit_test.go
│   ├── reflection/
│   │   ├── reflection.go
│   │   └── reflection_test.go
│   ├── rwmutex/
│   │   ├── rwmutex.go
│   │   ├── rwmutex_z_bench_test.go
│   │   └── rwmutex_z_unit_test.go
│   ├── tracing/
│   │   └── tracing.go
│   └── utils/
│       ├── utils.go
│       ├── utils_array.go
│       ├── utils_debug.go
│       ├── utils_io.go
│       ├── utils_is.go
│       ├── utils_list.go
│       ├── utils_map.go
│       ├── utils_reflect.go
│       ├── utils_str.go
│       ├── utils_z_bench_test.go
│       ├── utils_z_unit_is_test.go
│       └── utils_z_unit_test.go
├── net/
│   ├── gclient/
│   │   ├── gclient.go
│   │   ├── gclient_bytes.go
│   │   ├── gclient_chain.go
│   │   ├── gclient_config.go
│   │   ├── gclient_content.go
│   │   ├── gclient_discovery.go
│   │   ├── gclient_dump.go
│   │   ├── gclient_metrics.go
│   │   ├── gclient_middleware.go
│   │   ├── gclient_observability.go
│   │   ├── gclient_request.go
│   │   ├── gclient_request_obj.go
│   │   ├── gclient_response.go
│   │   ├── gclient_tracer.go
│   │   ├── gclient_tracer_metrics.go
│   │   ├── gclient_tracer_noop.go
│   │   ├── gclient_tracer_tracing.go
│   │   ├── gclient_var.go
│   │   ├── gclient_websocket.go
│   │   ├── gclient_z_example_test.go
│   │   ├── gclient_z_unit_feature_trace_test.go
│   │   ├── gclient_z_unit_issue_test.go
│   │   ├── gclient_z_unit_request_obj_test.go
│   │   ├── gclient_z_unit_test.go
│   │   └── testdata/
│   │       ├── server.crt
│   │       ├── server.key
│   │       └── upload/
│   │           ├── file1.txt
│   │           └── file2.txt
│   ├── ghttp/
│   │   ├── ghttp.go
│   │   ├── ghttp_func.go
│   │   ├── ghttp_middleware_cors.go
│   │   ├── ghttp_middleware_gzip.go
│   │   ├── ghttp_middleware_handler_response.go
│   │   ├── ghttp_middleware_json_body.go
│   │   ├── ghttp_middleware_never_done_ctx.go
│   │   ├── ghttp_middleware_tracing.go
│   │   ├── ghttp_request.go
│   │   ├── ghttp_request_auth.go
│   │   ├── ghttp_request_middleware.go
│   │   ├── ghttp_request_param.go
│   │   ├── ghttp_request_param_ctx.go
│   │   ├── ghttp_request_param_file.go
│   │   ├── ghttp_request_param_form.go
│   │   ├── ghttp_request_param_handler.go
│   │   ├── ghttp_request_param_page.go
│   │   ├── ghttp_request_param_param.go
│   │   ├── ghttp_request_param_query.go
│   │   ├── ghttp_request_param_request.go
│   │   ├── ghttp_request_param_router.go
│   │   ├── ghttp_request_view.go
│   │   ├── ghttp_response.go
│   │   ├── ghttp_response_cors.go
│   │   ├── ghttp_response_view.go
│   │   ├── ghttp_response_write.go
│   │   ├── ghttp_server.go
│   │   ├── ghttp_server_admin.go
│   │   ├── ghttp_server_admin_process.go
│   │   ├── ghttp_server_admin_unix.go
│   │   ├── ghttp_server_admin_windows.go
│   │   ├── ghttp_server_config.go
│   │   ├── ghttp_server_config_api.go
│   │   ├── ghttp_server_config_cookie.go
│   │   ├── ghttp_server_config_logging.go
│   │   ├── ghttp_server_config_mess.go
│   │   ├── ghttp_server_config_route.go
│   │   ├── ghttp_server_config_session.go
│   │   ├── ghttp_server_config_static.go
│   │   ├── ghttp_server_cookie.go
│   │   ├── ghttp_server_domain.go
│   │   ├── ghttp_server_error_logger.go
│   │   ├── ghttp_server_graceful.go
│   │   ├── ghttp_server_handler.go
│   │   ├── ghttp_server_log.go
│   │   ├── ghttp_server_metric.go
│   │   ├── ghttp_server_openapi.go
│   │   ├── ghttp_server_plugin.go
│   │   ├── ghttp_server_pprof.go
│   │   ├── ghttp_server_registry.go
│   │   ├── ghttp_server_router.go
│   │   ├── ghttp_server_router_group.go
│   │   ├── ghttp_server_router_hook.go
│   │   ├── ghttp_server_router_middleware.go
│   │   ├── ghttp_server_router_serve.go
│   │   ├── ghttp_server_service_handler.go
│   │   ├── ghttp_server_service_object.go
│   │   ├── ghttp_server_session.go
│   │   ├── ghttp_server_status.go
│   │   ├── ghttp_server_swagger.go
│   │   ├── ghttp_server_util.go
│   │   ├── ghttp_server_websocket.go
│   │   ├── ghttp_z_bench_test.go
│   │   ├── ghttp_z_example_test.go
│   │   ├── ghttp_z_unit_feature_config_test.go
│   │   ├── ghttp_z_unit_feature_context_test.go
│   │   ├── ghttp_z_unit_feature_cookie_test.go
│   │   ├── ghttp_z_unit_feature_custom_listeners_test.go
│   │   ├── ghttp_z_unit_feature_error_code_test.go
│   │   ├── ghttp_z_unit_feature_https_test.go
│   │   ├── ghttp_z_unit_feature_ip_test.go
│   │   ├── ghttp_z_unit_feature_log_test.go
│   │   ├── ghttp_z_unit_feature_middleware_basic_test.go
│   │   ├── ghttp_z_unit_feature_middleware_cors_test.go
│   │   ├── ghttp_z_unit_feature_openapi_swagger_test.go
│   │   ├── ghttp_z_unit_feature_otel_test.go
│   │   ├── ghttp_z_unit_feature_pprof_test.go
│   │   ├── ghttp_z_unit_feature_request_ctx_test.go
│   │   ├── ghttp_z_unit_feature_request_file_test.go
│   │   ├── ghttp_z_unit_feature_request_json_test.go
│   │   ├── ghttp_z_unit_feature_request_page_test.go
│   │   ├── ghttp_z_unit_feature_request_param_test.go
│   │   ├── ghttp_z_unit_feature_request_struct_test.go
│   │   ├── ghttp_z_unit_feature_request_test.go
│   │   ├── ghttp_z_unit_feature_request_xml_test.go
│   │   ├── ghttp_z_unit_feature_response_test.go
│   │   ├── ghttp_z_unit_feature_router_basic_test.go
│   │   ├── ghttp_z_unit_feature_router_domain_basic_test.go
│   │   ├── ghttp_z_unit_feature_router_domain_object_rest_test.go
│   │   ├── ghttp_z_unit_feature_router_domain_object_test.go
│   │   ├── ghttp_z_unit_feature_router_exit_test.go
│   │   ├── ghttp_z_unit_feature_router_group_group_test.go
│   │   ├── ghttp_z_unit_feature_router_group_hook_test.go
│   │   ├── ghttp_z_unit_feature_router_group_rest_test.go
│   │   ├── ghttp_z_unit_feature_router_group_test.go
│   │   ├── ghttp_z_unit_feature_router_hook_test.go
│   │   ├── ghttp_z_unit_feature_router_names_test.go
│   │   ├── ghttp_z_unit_feature_router_object_rest1_test.go
│   │   ├── ghttp_z_unit_feature_router_object_rest2_test.go
│   │   ├── ghttp_z_unit_feature_router_object_test.go
│   │   ├── ghttp_z_unit_feature_router_standard_test.go
│   │   ├── ghttp_z_unit_feature_server_util_test.go
│   │   ├── ghttp_z_unit_feature_session_test.go
│   │   ├── ghttp_z_unit_feature_static_test.go
│   │   ├── ghttp_z_unit_feature_status_test.go
│   │   ├── ghttp_z_unit_feature_template_test.go
│   │   ├── ghttp_z_unit_feature_websocket_test.go
│   │   ├── ghttp_z_unit_issue_test.go
│   │   ├── ghttp_z_unit_middleware_gzip_test.go
│   │   ├── ghttp_z_unit_test.go
│   │   ├── internal/
│   │   │   ├── graceful/
│   │   │   │   └── graceful.go
│   │   │   ├── response/
│   │   │   │   ├── response.go
│   │   │   │   ├── response_buffer_writer.go
│   │   │   │   └── response_writer.go
│   │   │   └── swaggerui/
│   │   │       ├── swaggerui-redoc.go
│   │   │       └── swaggerui.go
│   │   └── testdata/
│   │       ├── https/
│   │       │   ├── files/
│   │       │   │   ├── server.crt
│   │       │   │   └── server.key
│   │       │   └── packed/
│   │       │       └── packed.go
│   │       ├── issue1611/
│   │       │   ├── header.html
│   │       │   └── index/
│   │       │       └── layout.html
│   │       ├── issue2963/
│   │       │   ├── 1.txt
│   │       │   └── 中文G146(1)-icon.txt
│   │       ├── main.html
│   │       ├── static1/
│   │       │   ├── index.html
│   │       │   └── test.html
│   │       ├── template/
│   │       │   ├── basic/
│   │       │   │   └── index.html
│   │       │   ├── layout1/
│   │       │   │   ├── container.html
│   │       │   │   ├── footer.html
│   │       │   │   ├── header.html
│   │       │   │   └── layout.html
│   │       │   └── layout2/
│   │       │       ├── footer.html
│   │       │       ├── header.html
│   │       │       ├── layout.html
│   │       │       └── main/
│   │       │           ├── main1.html
│   │       │           └── main2.html
│   │       └── upload/
│   │           ├── file1.txt
│   │           ├── file2.txt
│   │           └── 中文.txt
│   ├── gipv4/
│   │   ├── gipv4.go
│   │   ├── gipv4_convert.go
│   │   ├── gipv4_ip.go
│   │   ├── gipv4_lookup.go
│   │   ├── gipv4_mac.go
│   │   ├── gipv4_z_unit_convert_test.go
│   │   ├── gipv4_z_unit_ip_test.go
│   │   ├── gipv4_z_unit_lookup_test.go
│   │   ├── gipv4_z_unit_mac_test.go
│   │   └── gipv4_z_unit_test.go
│   ├── gipv6/
│   │   └── gipv6.go
│   ├── goai/
│   │   ├── goai.go
│   │   ├── goai_callback.go
│   │   ├── goai_components.go
│   │   ├── goai_config.go
│   │   ├── goai_example.go
│   │   ├── goai_external_docs.go
│   │   ├── goai_header.go
│   │   ├── goai_info.go
│   │   ├── goai_link.go
│   │   ├── goai_mediatype.go
│   │   ├── goai_operation.go
│   │   ├── goai_parameter.go
│   │   ├── goai_parameter_ref.go
│   │   ├── goai_path.go
│   │   ├── goai_requestbody.go
│   │   ├── goai_response.go
│   │   ├── goai_response_ref.go
│   │   ├── goai_security.go
│   │   ├── goai_server.go
│   │   ├── goai_shema.go
│   │   ├── goai_shema_ref.go
│   │   ├── goai_shemas.go
│   │   ├── goai_tags.go
│   │   ├── goai_xextensions.go
│   │   ├── goai_z_unit_generic_type_test.go
│   │   ├── goai_z_unit_issue_test.go
│   │   ├── goai_z_unit_test.go
│   │   └── testdata/
│   │       ├── EmbeddedStructAttribute/
│   │       │   └── expect.json
│   │       ├── Issue3889JsonFile/
│   │       │   └── 201.json
│   │       ├── NameFromJsonTag/
│   │       │   ├── expect1.json
│   │       │   └── expect2.json
│   │       ├── XExtension/
│   │       │   └── expect.json
│   │       └── example.yaml
│   ├── gsel/
│   │   ├── gsel.go
│   │   ├── gsel_builder.go
│   │   ├── gsel_builder_least_connection.go
│   │   ├── gsel_builder_random.go
│   │   ├── gsel_builder_round_robin.go
│   │   ├── gsel_builder_weight.go
│   │   ├── gsel_selector_least_connection.go
│   │   ├── gsel_selector_random.go
│   │   ├── gsel_selector_round_robin.go
│   │   └── gsel_selector_weight.go
│   ├── gsvc/
│   │   ├── gsvc.go
│   │   ├── gsvc_discovery.go
│   │   ├── gsvc_endpoint.go
│   │   ├── gsvc_endpoints.go
│   │   ├── gsvc_metadata.go
│   │   ├── gsvc_registry.go
│   │   └── gsvc_service.go
│   ├── gtcp/
│   │   ├── gtcp.go
│   │   ├── gtcp_conn.go
│   │   ├── gtcp_conn_pkg.go
│   │   ├── gtcp_func.go
│   │   ├── gtcp_func_pkg.go
│   │   ├── gtcp_pool.go
│   │   ├── gtcp_pool_pkg.go
│   │   ├── gtcp_server.go
│   │   ├── gtcp_z_example_test.go
│   │   ├── gtcp_z_unit_conn_pkg_test.go
│   │   ├── gtcp_z_unit_pool_pkg_test.go
│   │   ├── gtcp_z_unit_pool_test.go
│   │   ├── gtcp_z_unit_test.go
│   │   └── testdata/
│   │       ├── crtFile
│   │       ├── keyFile
│   │       ├── server.crt
│   │       └── server.key
│   ├── gtrace/
│   │   ├── gtrace.go
│   │   ├── gtrace_baggage.go
│   │   ├── gtrace_carrier.go
│   │   ├── gtrace_content.go
│   │   ├── gtrace_span.go
│   │   ├── gtrace_tracer.go
│   │   ├── gtrace_z_unit_carrier_test.go
│   │   ├── gtrace_z_unit_feature_http_test.go
│   │   ├── gtrace_z_unit_test.go
│   │   └── internal/
│   │       └── provider/
│   │           ├── provider.go
│   │           └── provider_idgenerator.go
│   └── gudp/
│       ├── gudp.go
│       ├── gudp_conn.go
│       ├── gudp_conn_client_conn.go
│       ├── gudp_conn_server_conn.go
│       ├── gudp_func.go
│       ├── gudp_server.go
│       ├── gudp_z_example_test.go
│       └── gudp_z_unit_test.go
├── os/
│   ├── gbuild/
│   │   ├── gbuild.go
│   │   └── gbuild_z_unit_test.go
│   ├── gcache/
│   │   ├── gcache.go
│   │   ├── gcache_adapter.go
│   │   ├── gcache_adapter_memory.go
│   │   ├── gcache_adapter_memory_data.go
│   │   ├── gcache_adapter_memory_expire_sets.go
│   │   ├── gcache_adapter_memory_expire_times.go
│   │   ├── gcache_adapter_memory_item.go
│   │   ├── gcache_adapter_memory_lru.go
│   │   ├── gcache_adapter_redis.go
│   │   ├── gcache_cache.go
│   │   ├── gcache_cache_must.go
│   │   ├── gcache_z_bench_test.go
│   │   ├── gcache_z_example_cache_test.go
│   │   └── gcache_z_unit_test.go
│   ├── gcfg/
│   │   ├── gcfg.go
│   │   ├── gcfg_adaper.go
│   │   ├── gcfg_adapter_content.go
│   │   ├── gcfg_adapter_content_ctx.go
│   │   ├── gcfg_adapter_file.go
│   │   ├── gcfg_adapter_file_content.go
│   │   ├── gcfg_adapter_file_ctx.go
│   │   ├── gcfg_adapter_file_path.go
│   │   ├── gcfg_ctx_keys.go
│   │   ├── gcfg_loader.go
│   │   ├── gcfg_watcher_registry.go
│   │   ├── gcfg_watcher_registry_test.go
│   │   ├── gcfg_z_example_test.go
│   │   ├── gcfg_z_unit_adapter_content_test.go
│   │   ├── gcfg_z_unit_adapter_file_test.go
│   │   ├── gcfg_z_unit_basic_test.go
│   │   ├── gcfg_z_unit_instance_test.go
│   │   ├── gcfg_z_unit_loader_test.go
│   │   ├── gcfg_z_unit_test.go
│   │   ├── gcfg_z_unit_watcher_test.go
│   │   └── testdata/
│   │       ├── c1.toml
│   │       ├── cfg-with-utf8-bom.toml
│   │       ├── default/
│   │       │   ├── config.json
│   │       │   └── config.toml
│   │       ├── envfile/
│   │       │   └── c6.json
│   │       ├── envpath/
│   │       │   ├── c3.toml
│   │       │   └── c4.json
│   │       └── folder1/
│   │           ├── c1.toml
│   │           └── c2.json
│   ├── gcmd/
│   │   ├── gcmd.go
│   │   ├── gcmd_command.go
│   │   ├── gcmd_command_help.go
│   │   ├── gcmd_command_object.go
│   │   ├── gcmd_command_run.go
│   │   ├── gcmd_parser.go
│   │   ├── gcmd_scan.go
│   │   ├── gcmd_z_example_test.go
│   │   ├── gcmd_z_unit_feature_object1_test.go
│   │   ├── gcmd_z_unit_feature_object2_test.go
│   │   ├── gcmd_z_unit_feature_object3_test.go
│   │   ├── gcmd_z_unit_feature_object4_test.go
│   │   ├── gcmd_z_unit_issue_test.go
│   │   ├── gcmd_z_unit_parser_test.go
│   │   └── gcmd_z_unit_test.go
│   ├── gcron/
│   │   ├── gcron.go
│   │   ├── gcron_cron.go
│   │   ├── gcron_entry.go
│   │   ├── gcron_schedule.go
│   │   ├── gcron_schedule_check.go
│   │   ├── gcron_schedule_fix.go
│   │   ├── gcron_schedule_next.go
│   │   ├── gcron_z_bench_test.go
│   │   ├── gcron_z_example_1_test.go
│   │   ├── gcron_z_unit_entry_test.go
│   │   ├── gcron_z_unit_schedule_test.go
│   │   └── gcron_z_unit_test.go
│   ├── gctx/
│   │   ├── gctx.go
│   │   ├── gctx_never_done.go
│   │   ├── gctx_z_unit_internal_test.go
│   │   └── gctx_z_unit_test.go
│   ├── genv/
│   │   ├── genv.go
│   │   ├── genv_must.go
│   │   └── genv_z_unit_test.go
│   ├── gfile/
│   │   ├── gfile.go
│   │   ├── gfile_cache.go
│   │   ├── gfile_contents.go
│   │   ├── gfile_copy.go
│   │   ├── gfile_home.go
│   │   ├── gfile_match.go
│   │   ├── gfile_replace.go
│   │   ├── gfile_scan.go
│   │   ├── gfile_search.go
│   │   ├── gfile_size.go
│   │   ├── gfile_sort.go
│   │   ├── gfile_source.go
│   │   ├── gfile_time.go
│   │   ├── gfile_z_example_cache_test.go
│   │   ├── gfile_z_example_contents_test.go
│   │   ├── gfile_z_example_copy_test.go
│   │   ├── gfile_z_example_home_test.go
│   │   ├── gfile_z_example_replace_test.go
│   │   ├── gfile_z_example_scan_test.go
│   │   ├── gfile_z_example_search_test.go
│   │   ├── gfile_z_example_size_test.go
│   │   ├── gfile_z_example_sort_test.go
│   │   ├── gfile_z_example_time_test.go
│   │   ├── gfile_z_exmaple_basic_test.go
│   │   ├── gfile_z_unit_cache_test.go
│   │   ├── gfile_z_unit_contents_test.go
│   │   ├── gfile_z_unit_copy_test.go
│   │   ├── gfile_z_unit_match_test.go
│   │   ├── gfile_z_unit_replace_test.go
│   │   ├── gfile_z_unit_scan_test.go
│   │   ├── gfile_z_unit_search_test.go
│   │   ├── gfile_z_unit_size_test.go
│   │   ├── gfile_z_unit_sort_test.go
│   │   ├── gfile_z_unit_test.go
│   │   ├── gfile_z_unit_time_test.go
│   │   └── testdata/
│   │       ├── dir1/
│   │       │   └── file1
│   │       ├── dir2/
│   │       │   └── file2
│   │       └── readline/
│   │           └── file.log
│   ├── gfpool/
│   │   ├── gfpool.go
│   │   ├── gfpool_file.go
│   │   ├── gfpool_pool.go
│   │   ├── gfpool_z_bench_test.go
│   │   └── gfpool_z_unit_test.go
│   ├── gfsnotify/
│   │   ├── gfsnotify.go
│   │   ├── gfsnotify_event.go
│   │   ├── gfsnotify_filefunc.go
│   │   ├── gfsnotify_watcher.go
│   │   ├── gfsnotify_watcher_loop.go
│   │   └── gfsnotify_z_unit_test.go
│   ├── glog/
│   │   ├── glog.go
│   │   ├── glog_api.go
│   │   ├── glog_chaining.go
│   │   ├── glog_config.go
│   │   ├── glog_instance.go
│   │   ├── glog_logger.go
│   │   ├── glog_logger_api.go
│   │   ├── glog_logger_chaining.go
│   │   ├── glog_logger_color.go
│   │   ├── glog_logger_config.go
│   │   ├── glog_logger_handler.go
│   │   ├── glog_logger_handler_json.go
│   │   ├── glog_logger_handler_structure.go
│   │   ├── glog_logger_level.go
│   │   ├── glog_logger_rotate.go
│   │   ├── glog_logger_writer.go
│   │   ├── glog_z_example_test.go
│   │   ├── glog_z_unit_config_test.go
│   │   ├── glog_z_unit_internal_test.go
│   │   ├── glog_z_unit_logger_chaining_test.go
│   │   ├── glog_z_unit_logger_handler_test.go
│   │   ├── glog_z_unit_logger_rotate_test.go
│   │   └── glog_z_unit_test.go
│   ├── gmetric/
│   │   ├── gmetric.go
│   │   ├── gmetric_attribute.go
│   │   ├── gmetric_attribute_map.go
│   │   ├── gmetric_global_attributes.go
│   │   ├── gmetric_meter.go
│   │   ├── gmetric_meter_callback.go
│   │   ├── gmetric_meter_counter.go
│   │   ├── gmetric_meter_histogram.go
│   │   ├── gmetric_meter_metric_info.go
│   │   ├── gmetric_meter_metric_instrument.go
│   │   ├── gmetric_meter_observable_counter.go
│   │   ├── gmetric_meter_observable_gauge.go
│   │   ├── gmetric_meter_observable_updown_counter.go
│   │   ├── gmetric_meter_updown_counter.go
│   │   ├── gmetric_metric.go
│   │   ├── gmetric_noop_counter_performer.go
│   │   ├── gmetric_noop_histogram_performer.go
│   │   ├── gmetric_noop_observable_counter_performer.go
│   │   ├── gmetric_noop_observable_gauge_performer.go
│   │   ├── gmetric_noop_observable_updown_counter_performer.go
│   │   ├── gmetric_noop_updown_counter_performer.go
│   │   ├── gmetric_provider.go
│   │   ├── gmetric_z_unit_internal_test.go
│   │   └── gmetric_z_unit_test.go
│   ├── gmlock/
│   │   ├── gmlock.go
│   │   ├── gmlock_locker.go
│   │   ├── gmlock_z_bench_test.go
│   │   └── gmlock_z_unit_test.go
│   ├── gmutex/
│   │   ├── gmutex.go
│   │   ├── gmutex_mutex.go
│   │   ├── gmutex_rwmutex.go
│   │   ├── gmutex_z_bench_test.go
│   │   ├── gmutex_z_unit_mutex_test.go
│   │   └── gmutex_z_unit_rwmutex_test.go
│   ├── gproc/
│   │   ├── gproc.go
│   │   ├── gproc_comm.go
│   │   ├── gproc_comm_receive.go
│   │   ├── gproc_comm_send.go
│   │   ├── gproc_manager.go
│   │   ├── gproc_must.go
│   │   ├── gproc_process.go
│   │   ├── gproc_process_newprocess.go
│   │   ├── gproc_process_newprocess_windows.go
│   │   ├── gproc_shell.go
│   │   ├── gproc_signal.go
│   │   ├── gproc_z_signal_test.go
│   │   ├── gproc_z_unit_process_windows_test.go
│   │   ├── gproc_z_unit_shell_windows_test.go
│   │   ├── gproc_z_unit_test.go
│   │   └── testdata/
│   │       ├── gobuild/
│   │       │   └── main.go
│   │       └── shellexec/
│   │           └── main.go
│   ├── gres/
│   │   ├── gres.go
│   │   ├── gres_file.go
│   │   ├── gres_func.go
│   │   ├── gres_func_zip.go
│   │   ├── gres_http_file.go
│   │   ├── gres_instance.go
│   │   ├── gres_resource.go
│   │   ├── gres_z_unit_test.go
│   │   └── testdata/
│   │       ├── data/
│   │       │   └── data.go
│   │       ├── example/
│   │       │   ├── boot/
│   │       │   │   └── data.go
│   │       │   └── files/
│   │       │       ├── config/
│   │       │       │   └── config.toml
│   │       │       ├── public/
│   │       │       │   └── index.html
│   │       │       └── template/
│   │       │           └── index.tpl
│   │       ├── files/
│   │       │   ├── config-custom/
│   │       │   │   ├── config.toml
│   │       │   │   └── my.ini
│   │       │   ├── config-res/
│   │       │   │   ├── config.toml
│   │       │   │   └── my.ini
│   │       │   ├── dir1/
│   │       │   │   ├── sub/
│   │       │   │   │   └── sub-test1.txt
│   │       │   │   └── test1
│   │       │   ├── dir2/
│   │       │   │   ├── sub/
│   │       │   │   │   └── sub-test2.txt
│   │       │   │   └── test2
│   │       │   ├── i18n-dir/
│   │       │   │   ├── en/
│   │       │   │   │   ├── hello.toml
│   │       │   │   │   └── world.toml
│   │       │   │   ├── ja/
│   │       │   │   │   ├── hello.yaml
│   │       │   │   │   └── world.yaml
│   │       │   │   ├── ru/
│   │       │   │   │   ├── hello.ini
│   │       │   │   │   └── world.ini
│   │       │   │   ├── zh-CN/
│   │       │   │   │   ├── hello.json
│   │       │   │   │   └── world.json
│   │       │   │   └── zh-TW/
│   │       │   │       ├── hello.xml
│   │       │   │       └── world.xml
│   │       │   ├── i18n-file/
│   │       │   │   ├── en.toml
│   │       │   │   ├── ja.yaml
│   │       │   │   ├── ru.ini
│   │       │   │   ├── zh-CN.json
│   │       │   │   └── zh-TW.xml
│   │       │   ├── i18n-res/
│   │       │   │   ├── en.toml
│   │       │   │   ├── ja.toml
│   │       │   │   ├── ru.toml
│   │       │   │   ├── zh-CN.toml
│   │       │   │   └── zh-TW.toml
│   │       │   ├── root/
│   │       │   │   ├── css/
│   │       │   │   │   └── style.css
│   │       │   │   └── index.html
│   │       │   └── template-res/
│   │       │       ├── index.html
│   │       │       ├── layout1/
│   │       │       │   ├── container.html
│   │       │       │   ├── footer.html
│   │       │       │   ├── header.html
│   │       │       │   └── layout.html
│   │       │       └── layout2/
│   │       │           ├── footer.html
│   │       │           ├── header.html
│   │       │           ├── layout.html
│   │       │           └── main/
│   │       │               ├── main1.html
│   │       │               └── main2.html
│   │       ├── testdata.go
│   │       └── testdata.txt
│   ├── grpool/
│   │   ├── grpool.go
│   │   ├── grpool_pool.go
│   │   ├── grpool_supervisor.go
│   │   ├── grpool_z_bench_test.go
│   │   └── grpool_z_unit_test.go
│   ├── gsession/
│   │   ├── gsession.go
│   │   ├── gsession_manager.go
│   │   ├── gsession_session.go
│   │   ├── gsession_storage.go
│   │   ├── gsession_storage_base.go
│   │   ├── gsession_storage_file.go
│   │   ├── gsession_storage_memory.go
│   │   ├── gsession_storage_redis.go
│   │   ├── gsession_storage_redis_hashtable.go
│   │   ├── gsession_z_example_test.go
│   │   ├── gsession_z_unit_storage_file_test.go
│   │   ├── gsession_z_unit_storage_memory_test.go
│   │   └── gsession_z_unit_test.go
│   ├── gspath/
│   │   ├── gspath.go
│   │   ├── gspath_cache.go
│   │   └── gspath_z_unit_test.go
│   ├── gstructs/
│   │   ├── gstructs.go
│   │   ├── gstructs_field.go
│   │   ├── gstructs_field_tag.go
│   │   ├── gstructs_tag.go
│   │   ├── gstructs_type.go
│   │   ├── gstructs_z_bench_test.go
│   │   └── gstructs_z_unit_test.go
│   ├── gtime/
│   │   ├── gtime.go
│   │   ├── gtime_format.go
│   │   ├── gtime_sql.go
│   │   ├── gtime_time.go
│   │   ├── gtime_time_wrapper.go
│   │   ├── gtime_time_zone.go
│   │   ├── gtime_z_bench_test.go
│   │   ├── gtime_z_example_basic_test.go
│   │   ├── gtime_z_example_time_test.go
│   │   ├── gtime_z_unit_feature_json_test.go
│   │   ├── gtime_z_unit_feature_sql_test.go
│   │   ├── gtime_z_unit_format_test.go
│   │   ├── gtime_z_unit_issue_test.go
│   │   ├── gtime_z_unit_test.go
│   │   └── gtime_z_unit_time_test.go
│   ├── gtimer/
│   │   ├── gtimer.go
│   │   ├── gtimer_entry.go
│   │   ├── gtimer_exit.go
│   │   ├── gtimer_queue.go
│   │   ├── gtimer_queue_heap.go
│   │   ├── gtimer_timer.go
│   │   ├── gtimer_timer_loop.go
│   │   ├── gtimer_z_bench_test.go
│   │   ├── gtimer_z_example_test.go
│   │   ├── gtimer_z_unit_entry_test.go
│   │   ├── gtimer_z_unit_internal_test.go
│   │   ├── gtimer_z_unit_test.go
│   │   └── gtimer_z_unit_timer_test.go
│   └── gview/
│       ├── gview.go
│       ├── gview_buildin.go
│       ├── gview_config.go
│       ├── gview_error.go
│       ├── gview_i18n.go
│       ├── gview_instance.go
│       ├── gview_parse.go
│       ├── gview_z_unit_config_test.go
│       ├── gview_z_unit_feature_encode_test.go
│       ├── gview_z_unit_i18n_test.go
│       ├── gview_z_unit_test.go
│       └── testdata/
│           ├── config/
│           │   └── test.html
│           ├── i18n/
│           │   ├── en.toml
│           │   ├── ja.toml
│           │   ├── ru.toml
│           │   ├── zh-CN.toml
│           │   └── zh-TW.toml
│           ├── issue1416/
│           │   ├── gview copy.tpl
│           │   └── gview.tpl
│           └── tpl/
│               └── encode.tpl
├── sonar-project.properties
├── test/
│   └── gtest/
│       ├── gtest.go
│       ├── gtest_t.go
│       ├── gtest_util.go
│       ├── gtest_z_unit_test.go
│       └── testdata/
│           └── testdata.txt
├── text/
│   ├── gregex/
│   │   ├── gregex.go
│   │   ├── gregex_cache.go
│   │   ├── gregex_z_bench_test.go
│   │   ├── gregex_z_example_test.go
│   │   └── gregex_z_unit_test.go
│   └── gstr/
│       ├── gstr.go
│       ├── gstr_array.go
│       ├── gstr_case.go
│       ├── gstr_compare.go
│       ├── gstr_contain.go
│       ├── gstr_convert.go
│       ├── gstr_count.go
│       ├── gstr_create.go
│       ├── gstr_domain.go
│       ├── gstr_is.go
│       ├── gstr_length.go
│       ├── gstr_list.go
│       ├── gstr_parse.go
│       ├── gstr_pos.go
│       ├── gstr_replace.go
│       ├── gstr_similar.go
│       ├── gstr_slashes.go
│       ├── gstr_split_join.go
│       ├── gstr_sub.go
│       ├── gstr_trim.go
│       ├── gstr_upper_lower.go
│       ├── gstr_version.go
│       ├── gstr_z_example_test.go
│       ├── gstr_z_unit_array_test.go
│       ├── gstr_z_unit_case_test.go
│       ├── gstr_z_unit_convert_test.go
│       ├── gstr_z_unit_domain_test.go
│       ├── gstr_z_unit_list_test.go
│       ├── gstr_z_unit_parse_test.go
│       ├── gstr_z_unit_pos_test.go
│       ├── gstr_z_unit_replace_test.go
│       ├── gstr_z_unit_test.go
│       ├── gstr_z_unit_trim_test.go
│       └── gstr_z_unit_version_test.go
├── util/
│   ├── gconv/
│   │   ├── gconv.go
│   │   ├── gconv_basic.go
│   │   ├── gconv_convert.go
│   │   ├── gconv_float.go
│   │   ├── gconv_int.go
│   │   ├── gconv_map.go
│   │   ├── gconv_maps.go
│   │   ├── gconv_maptomap.go
│   │   ├── gconv_maptomaps.go
│   │   ├── gconv_ptr.go
│   │   ├── gconv_scan.go
│   │   ├── gconv_scan_list.go
│   │   ├── gconv_slice_any.go
│   │   ├── gconv_slice_bool.go
│   │   ├── gconv_slice_float.go
│   │   ├── gconv_slice_int.go
│   │   ├── gconv_slice_str.go
│   │   ├── gconv_slice_uint.go
│   │   ├── gconv_struct.go
│   │   ├── gconv_structs.go
│   │   ├── gconv_time.go
│   │   ├── gconv_uint.go
│   │   ├── gconv_unsafe.go
│   │   ├── gconv_z_bench_bytes_test.go
│   │   ├── gconv_z_bench_float_test.go
│   │   ├── gconv_z_bench_int_test.go
│   │   ├── gconv_z_bench_reflect_test.go
│   │   ├── gconv_z_bench_str_test.go
│   │   ├── gconv_z_bench_struct_test.go
│   │   ├── gconv_z_unit_bool_test.go
│   │   ├── gconv_z_unit_byte_test.go
│   │   ├── gconv_z_unit_convert_test.go
│   │   ├── gconv_z_unit_converter_test.go
│   │   ├── gconv_z_unit_custom_base_type_test.go
│   │   ├── gconv_z_unit_float_test.go
│   │   ├── gconv_z_unit_int_test.go
│   │   ├── gconv_z_unit_interfaces_test.go
│   │   ├── gconv_z_unit_issue_test.go
│   │   ├── gconv_z_unit_map_test.go
│   │   ├── gconv_z_unit_ptr_test.go
│   │   ├── gconv_z_unit_rune_test.go
│   │   ├── gconv_z_unit_scan_basic_types_test.go
│   │   ├── gconv_z_unit_scan_list_test.go
│   │   ├── gconv_z_unit_scan_omit_test.go
│   │   ├── gconv_z_unit_scan_test.go
│   │   ├── gconv_z_unit_string_test.go
│   │   ├── gconv_z_unit_struct_marshal_unmarshal_test.go
│   │   ├── gconv_z_unit_struct_test.go
│   │   ├── gconv_z_unit_test.go
│   │   ├── gconv_z_unit_time_test.go
│   │   ├── gconv_z_unit_uint_test.go
│   │   ├── gconv_z_unit_unsafe_test.go
│   │   └── internal/
│   │       ├── converter/
│   │       │   ├── converter.go
│   │       │   ├── converter_bool.go
│   │       │   ├── converter_builtin.go
│   │       │   ├── converter_bytes.go
│   │       │   ├── converter_convert.go
│   │       │   ├── converter_float.go
│   │       │   ├── converter_int.go
│   │       │   ├── converter_map.go
│   │       │   ├── converter_maptomap.go
│   │       │   ├── converter_maptomaps.go
│   │       │   ├── converter_rune.go
│   │       │   ├── converter_scan.go
│   │       │   ├── converter_slice_any.go
│   │       │   ├── converter_slice_bool.go
│   │       │   ├── converter_slice_float.go
│   │       │   ├── converter_slice_int.go
│   │       │   ├── converter_slice_map.go
│   │       │   ├── converter_slice_str.go
│   │       │   ├── converter_slice_uint.go
│   │       │   ├── converter_string.go
│   │       │   ├── converter_struct.go
│   │       │   ├── converter_structs.go
│   │       │   ├── converter_time.go
│   │       │   └── converter_uint.go
│   │       ├── localinterface/
│   │       │   └── localinterface.go
│   │       └── structcache/
│   │           ├── structcache.go
│   │           ├── structcache_cached.go
│   │           ├── structcache_cached_field_info.go
│   │           ├── structcache_cached_struct_info.go
│   │           └── structcache_pool.go
│   ├── gmeta/
│   │   ├── gmeta.go
│   │   ├── gmeta_z_bench_test.go
│   │   └── gmeta_z_unit_test.go
│   ├── gmode/
│   │   ├── gmode.go
│   │   └── gmode_z_unit_test.go
│   ├── gpage/
│   │   ├── gpage.go
│   │   └── gpage_z_unit_test.go
│   ├── grand/
│   │   ├── grand.go
│   │   ├── grand_buffer.go
│   │   ├── grand_z_bench_test.go
│   │   └── grand_z_unit_test.go
│   ├── gtag/
│   │   ├── gtag.go
│   │   ├── gtag_enums.go
│   │   ├── gtag_func.go
│   │   ├── gtag_z_example_test.go
│   │   └── gtag_z_unit_test.go
│   ├── guid/
│   │   ├── guid.go
│   │   ├── guid_z_bench_test.go
│   │   └── guid_z_unit_test.go
│   ├── gutil/
│   │   ├── gutil.go
│   │   ├── gutil_comparator.go
│   │   ├── gutil_copy.go
│   │   ├── gutil_default.go
│   │   ├── gutil_dump.go
│   │   ├── gutil_goroutine.go
│   │   ├── gutil_is.go
│   │   ├── gutil_list.go
│   │   ├── gutil_map.go
│   │   ├── gutil_reflect.go
│   │   ├── gutil_slice.go
│   │   ├── gutil_struct.go
│   │   ├── gutil_try_catch.go
│   │   ├── gutil_z_bench_test.go
│   │   ├── gutil_z_example_test.go
│   │   ├── gutil_z_unit_comparator_test.go
│   │   ├── gutil_z_unit_copy_test.go
│   │   ├── gutil_z_unit_dump_test.go
│   │   ├── gutil_z_unit_goroutine_test.go
│   │   ├── gutil_z_unit_is_test.go
│   │   ├── gutil_z_unit_list_test.go
│   │   ├── gutil_z_unit_map_test.go
│   │   ├── gutil_z_unit_reflect_test.go
│   │   ├── gutil_z_unit_slice_test.go
│   │   ├── gutil_z_unit_struct_test.go
│   │   └── gutil_z_unit_test.go
│   └── gvalid/
│       ├── gvalid.go
│       ├── gvalid_error.go
│       ├── gvalid_register.go
│       ├── gvalid_validator.go
│       ├── gvalid_validator_check_map.go
│       ├── gvalid_validator_check_struct.go
│       ├── gvalid_validator_check_value.go
│       ├── gvalid_validator_message.go
│       ├── gvalid_z_example_feature_rule_test.go
│       ├── gvalid_z_example_test.go
│       ├── gvalid_z_unit_feature_checkmap_test.go
│       ├── gvalid_z_unit_feature_checkstruct_test.go
│       ├── gvalid_z_unit_feature_ci_test.go
│       ├── gvalid_z_unit_feature_custom_error_test.go
│       ├── gvalid_z_unit_feature_custom_rule_test.go
│       ├── gvalid_z_unit_feature_i18n_test.go
│       ├── gvalid_z_unit_feature_meta_test.go
│       ├── gvalid_z_unit_feature_recursive_test.go
│       ├── gvalid_z_unit_feature_rule_test.go
│       ├── gvalid_z_unit_internal_test.go
│       ├── gvalid_z_unit_issue_test.go
│       ├── internal/
│       │   └── builtin/
│       │       ├── builtin.go
│       │       ├── builtin_after.go
│       │       ├── builtin_after_equal.go
│       │       ├── builtin_alpha.go
│       │       ├── builtin_alpha_dash.go
│       │       ├── builtin_alpha_num.go
│       │       ├── builtin_array.go
│       │       ├── builtin_bail.go
│       │       ├── builtin_bank_card.go
│       │       ├── builtin_before.go
│       │       ├── builtin_before_equal.go
│       │       ├── builtin_between.go
│       │       ├── builtin_boolean.go
│       │       ├── builtin_ci.go
│       │       ├── builtin_date.go
│       │       ├── builtin_date_format.go
│       │       ├── builtin_datetime.go
│       │       ├── builtin_different.go
│       │       ├── builtin_domain.go
│       │       ├── builtin_email.go
│       │       ├── builtin_enums.go
│       │       ├── builtin_eq.go
│       │       ├── builtin_float.go
│       │       ├── builtin_foreach.go
│       │       ├── builtin_gt.go
│       │       ├── builtin_gte.go
│       │       ├── builtin_in.go
│       │       ├── builtin_integer.go
│       │       ├── builtin_ip.go
│       │       ├── builtin_ipv4.go
│       │       ├── builtin_ipv6.go
│       │       ├── builtin_json.go
│       │       ├── builtin_length.go
│       │       ├── builtin_lowercase.go
│       │       ├── builtin_lt.go
│       │       ├── builtin_lte.go
│       │       ├── builtin_mac.go
│       │       ├── builtin_max.go
│       │       ├── builtin_max_length.go
│       │       ├── builtin_min.go
│       │       ├── builtin_min_length.go
│       │       ├── builtin_not_eq.go
│       │       ├── builtin_not_in.go
│       │       ├── builtin_not_regex.go
│       │       ├── builtin_numeric.go
│       │       ├── builtin_passport.go
│       │       ├── builtin_password.go
│       │       ├── builtin_password2.go
│       │       ├── builtin_password3.go
│       │       ├── builtin_phone.go
│       │       ├── builtin_phone_loose.go
│       │       ├── builtin_postcode.go
│       │       ├── builtin_qq.go
│       │       ├── builtin_regex.go
│       │       ├── builtin_required.go
│       │       ├── builtin_required_if.go
│       │       ├── builtin_required_if_all.go
│       │       ├── builtin_required_unless.go
│       │       ├── builtin_required_with.go
│       │       ├── builtin_required_with_all.go
│       │       ├── builtin_required_without.go
│       │       ├── builtin_required_without_all.go
│       │       ├── builtin_resident_id.go
│       │       ├── builtin_same.go
│       │       ├── builtin_size.go
│       │       ├── builtin_telephone.go
│       │       ├── builtin_uppercase.go
│       │       └── builtin_url.go
│       └── testdata/
│           └── i18n/
│               ├── cn/
│               │   └── validation.toml
│               └── en/
│                   └── validation.toml
└── version.go
Download .txt
Showing preview only (1,517K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (16948 symbols across 1750 files)

FILE: .github/workflows/apollo/sql/apolloconfigdb.sql
  type `App` (line 35) | CREATE TABLE `App` (
  type `AppNamespace` (line 62) | CREATE TABLE `AppNamespace` (
  type `Audit` (line 88) | CREATE TABLE `Audit` (
  type `Cluster` (line 111) | CREATE TABLE `Cluster` (
  type `Commit` (line 135) | CREATE TABLE `Commit` (
  type `GrayReleaseRule` (line 160) | CREATE TABLE `GrayReleaseRule` (
  type `Instance` (line 186) | CREATE TABLE `Instance` (
  type `InstanceConfig` (line 207) | CREATE TABLE `InstanceConfig` (
  type `Item` (line 231) | CREATE TABLE `Item` (
  type `Namespace` (line 256) | CREATE TABLE `Namespace` (
  type `NamespaceLock` (line 280) | CREATE TABLE `NamespaceLock` (
  type `Release` (line 301) | CREATE TABLE `Release` (
  type `ReleaseHistory` (line 329) | CREATE TABLE `ReleaseHistory` (
  type `ReleaseMessage` (line 357) | CREATE TABLE `ReleaseMessage` (
  type `ServerConfig` (line 373) | CREATE TABLE `ServerConfig` (
  type `AccessKey` (line 395) | CREATE TABLE `AccessKey` (

FILE: .github/workflows/apollo/sql/apolloportaldb.sql
  type `App` (line 35) | CREATE TABLE `App` (
  type `AppNamespace` (line 62) | CREATE TABLE `AppNamespace` (
  type `Consumer` (line 88) | CREATE TABLE `Consumer` (
  type `ConsumerAudit` (line 114) | CREATE TABLE `ConsumerAudit` (
  type `ConsumerRole` (line 133) | CREATE TABLE `ConsumerRole` (
  type `ConsumerToken` (line 156) | CREATE TABLE `ConsumerToken` (
  type `Favorite` (line 177) | CREATE TABLE `Favorite` (
  type `Permission` (line 199) | CREATE TABLE `Permission` (
  type `Role` (line 221) | CREATE TABLE `Role` (
  type `RolePermission` (line 242) | CREATE TABLE `RolePermission` (
  type `ServerConfig` (line 265) | CREATE TABLE `ServerConfig` (
  type `UserRole` (line 288) | CREATE TABLE `UserRole` (
  type `Users` (line 309) | CREATE TABLE `Users` (
  type `Authorities` (line 326) | CREATE TABLE `Authorities` (
  type SPRING_SESSION (line 392) | CREATE TABLE SPRING_SESSION (
  type SPRING_SESSION_IX1 (line 403) | CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID)
  type SPRING_SESSION_IX2 (line 404) | CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME)
  type SPRING_SESSION_IX3 (line 405) | CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME)
  type SPRING_SESSION_ATTRIBUTES (line 407) | CREATE TABLE SPRING_SESSION_ATTRIBUTES (

FILE: cmd/gf/gfcmd/gfcmd.go
  constant cliFolderName (line 29) | cliFolderName = `hack`
  type Command (line 33) | type Command struct
    method Run (line 38) | func (c *Command) Run(ctx context.Context) {
  function GetCommand (line 73) | func GetCommand(ctx context.Context) (*Command, error) {
  function handleZshAlias (line 103) | func handleZshAlias() {

FILE: cmd/gf/internal/cmd/cmd.go
  type cGF (line 26) | type cGF struct
    method Index (line 52) | func (c cGF) Index(ctx context.Context, in cGFInput) (out *cGFOutput, ...
  constant cGFAd (line 31) | cGFAd = `
  function init (line 37) | func init() {
  type cGFInput (line 43) | type cGFInput struct
  type cGFOutput (line 50) | type cGFOutput struct

FILE: cmd/gf/internal/cmd/cmd_build.go
  type cBuild (line 38) | type cBuild struct
    method Index (line 160) | func (c cBuild) Index(ctx context.Context, in cBuildInput) (out *cBuil...
    method doBinaryBuild (line 304) | func (c cBuild) doBinaryBuild(
    method getBuildInVarStr (line 368) | func (c cBuild) getBuildInVarStr(ctx context.Context, in cBuildInput) ...
    method getGitCommit (line 384) | func (c cBuild) getGitCommit(ctx context.Context) string {
  constant cBuildDefaultFile (line 45) | cBuildDefaultFile = "main.go"
  constant cBuildBrief (line 46) | cBuildBrief       = `cross-building go project for lots of platforms`
  constant cBuildEg (line 47) | cBuildEg          = `
  constant cBuildDc (line 56) | cBuildDc = `
  constant cBuildAd (line 64) | cBuildAd = `
  constant cBuildPlatforms (line 83) | cBuildPlatforms = `
  function init (line 130) | func init() {
  type cBuildInput (line 139) | type cBuildInput struct
  type cBuildOutput (line 158) | type cBuildOutput struct

FILE: cmd/gf/internal/cmd/cmd_doc.go
  constant GitName (line 27) | GitName    = "gf-site"
  constant BranchName (line 28) | BranchName = "gh-pages"
  constant SiteFileName (line 30) | SiteFileName = GitName + "-" + BranchName
  constant DocURL (line 32) | DocURL = "https://github.com/gogf/" + GitName + "/archive/refs/heads/" +...
  type cDoc (line 39) | type cDoc struct
    method Index (line 54) | func (c cDoc) Index(ctx context.Context, in cDocInput) (out *cDocOutpu...
  type cDocInput (line 43) | type cDocInput struct
  type cDocOutput (line 52) | type cDocOutput struct
  type DocSetting (line 90) | type DocSetting struct
    method Clean (line 117) | func (d *DocSetting) Clean() error {
    method DownloadDoc (line 129) | func (d *DocSetting) DownloadDoc() error {
  function NewDocSetting (line 98) | func NewDocSetting(ctx context.Context, in cDocInput) *DocSetting {

FILE: cmd/gf/internal/cmd/cmd_docker.go
  type cDocker (line 27) | type cDocker struct
    method Index (line 94) | func (c cDocker) Index(ctx context.Context, in cDockerInput) (out *cDo...
    method exeDockerShell (line 173) | func (c cDocker) exeDockerShell(ctx context.Context, shellFilePath str...
  constant cDockerUsage (line 32) | cDockerUsage = `gf docker [MAIN] [OPTION]`
  constant cDockerBrief (line 33) | cDockerBrief = `build docker image for current GoFrame project`
  constant cDockerEg (line 34) | cDockerEg    = `
  constant cDockerDc (line 44) | cDockerDc = `
  constant cDockerMainBrief (line 50) | cDockerMainBrief        = `main file path for "gf build", it's "main.go"...
  constant cDockerBuildBrief (line 51) | cDockerBuildBrief       = `binary build options before docker image buil...
  constant cDockerFileBrief (line 52) | cDockerFileBrief        = `file path of the Dockerfile. it's "manifest/d...
  constant cDockerShellBrief (line 53) | cDockerShellBrief       = `path of the shell file which is executed befo...
  constant cDockerPushBrief (line 54) | cDockerPushBrief        = `auto push the docker image to docker registry...
  constant cDockerTagBrief (line 55) | cDockerTagBrief         = `full tag for this docker, pattern like "xxx.x...
  constant cDockerTagNameBrief (line 56) | cDockerTagNameBrief     = `tag name for this docker, pattern like "image...
  constant cDockerTagPrefixesBrief (line 57) | cDockerTagPrefixesBrief = `tag prefixes for this docker, which are used ...
  constant cDockerExtraBrief (line 58) | cDockerExtraBrief       = `extra build options passed to "docker image"`
  function init (line 61) | func init() {
  type cDockerInput (line 79) | type cDockerInput struct
  type cDockerOutput (line 92) | type cDockerOutput struct

FILE: cmd/gf/internal/cmd/cmd_env.go
  type cEnv (line 29) | type cEnv struct
    method Index (line 39) | func (c cEnv) Index(ctx context.Context, in cEnvInput) (out *cEnvOutpu...
  type cEnvInput (line 33) | type cEnvInput struct
  type cEnvOutput (line 37) | type cEnvOutput struct

FILE: cmd/gf/internal/cmd/cmd_fix.go
  type cFix (line 26) | type cFix struct
    method Index (line 43) | func (c cFix) Index(ctx context.Context, in cFixInput) (out *cFixOutpu...
    method doFix (line 69) | func (c cFix) doFix(in cFixInput) (err error) {
    method doFixV23 (line 91) | func (c cFix) doFixV23(version string) error {
    method doFixV25 (line 109) | func (c cFix) doFixV25(version string) (err error) {
    method doFixV25Content (line 117) | func (c cFix) doFixV25Content(content string) (newContent string, err ...
    method autoDetectVersion (line 130) | func (c cFix) autoDetectVersion(in cFixInput) (string, error) {
  type cFixInput (line 30) | type cFixInput struct
  type cFixOutput (line 36) | type cFixOutput struct
  type cFixItem (line 38) | type cFixItem struct

FILE: cmd/gf/internal/cmd/cmd_gen.go
  type cGen (line 18) | type cGen struct
  constant cGenBrief (line 29) | cGenBrief = `automatically generate go files for dao/do/entity/pb/pbentity`
  constant cGenDc (line 30) | cGenDc    = `
  function init (line 37) | func init() {

FILE: cmd/gf/internal/cmd/cmd_init.go
  type cInit (line 36) | type cInit struct
    method Index (line 100) | func (c cInit) Index(ctx context.Context, in cInitInput) (out *cInitOu...
    method initFromRemote (line 116) | func (c cInit) initFromRemote(ctx context.Context, in cInitInput) (out...
    method initFromBuiltin (line 166) | func (c cInit) initFromBuiltin(ctx context.Context, in cInitInput) (ou...
    method initInteractive (line 277) | func (c cInit) initInteractive(ctx context.Context, in cInitInput) (ou...
  constant cInitRepoPrefix (line 41) | cInitRepoPrefix  = `github.com/gogf/`
  constant cInitMonoRepo (line 42) | cInitMonoRepo    = `template-mono`
  constant cInitMonoRepoApp (line 43) | cInitMonoRepoApp = `template-mono-app`
  constant cInitSingleRepo (line 44) | cInitSingleRepo  = `template-single`
  constant cInitBrief (line 45) | cInitBrief       = `create and initialize an empty GoFrame project`
  constant cInitEg (line 46) | cInitEg          = `
  constant cInitNameBrief (line 58) | cInitNameBrief = `
  constant cInitGitDir (line 63) | cInitGitDir = ".git"
  constant cInitGitignore (line 65) | cInitGitignore = ".gitignore"
  function init (line 78) | func init() {
  type cInitInput (line 86) | type cInitInput struct
  type cInitOutput (line 98) | type cInitOutput struct
  function interactiveSelectTemplate (line 362) | func interactiveSelectTemplate() (repo, name, modPath string, upgradeDep...

FILE: cmd/gf/internal/cmd/cmd_install.go
  type cInstall (line 21) | type cInstall struct
    method Index (line 31) | func (c cInstall) Index(ctx context.Context, in cInstallInput) (out *c...
  type cInstallInput (line 25) | type cInstallInput struct
  type cInstallOutput (line 29) | type cInstallOutput struct

FILE: cmd/gf/internal/cmd/cmd_pack.go
  type cPack (line 27) | type cPack struct
    method Index (line 76) | func (c cPack) Index(ctx context.Context, in cPackInput) (out *cPackOu...
  constant cPackUsage (line 32) | cPackUsage = `gf pack SRC DST`
  constant cPackBrief (line 33) | cPackBrief = `packing any file/directory to a resource file, or a go file`
  constant cPackEg (line 34) | cPackEg    = `
  constant cPackSrcBrief (line 42) | cPackSrcBrief = `source path for packing, which can be multiple source p...
  constant cPackDstBrief (line 43) | cPackDstBrief = `
  constant cPackNameBrief (line 47) | cPackNameBrief     = `package name for output go file, it's set as its d...
  constant cPackPrefixBrief (line 48) | cPackPrefixBrief   = `prefix for each file packed into the resource file`
  constant cPackKeepPathBrief (line 49) | cPackKeepPathBrief = `keep the source path from system to resource file,...
  function init (line 52) | func init() {
  type cPackInput (line 65) | type cPackInput struct
  type cPackOutput (line 74) | type cPackOutput struct

FILE: cmd/gf/internal/cmd/cmd_run.go
  type cRun (line 32) | type cRun struct
    method Index (line 102) | func (c cRun) Index(ctx context.Context, in cRunInput) (out *cRunOutpu...
  type watchPath (line 36) | type watchPath struct
  type cRunApp (line 41) | type cRunApp struct
    method Run (line 181) | func (app *cRunApp) Run(ctx context.Context, outputPath string) {
    method End (line 222) | func (app *cRunApp) End(ctx context.Context, sig os.Signal, outputPath...
    method genOutputPath (line 266) | func (app *cRunApp) genOutputPath() (outputPath string) {
    method getWatchPaths (line 289) | func (app *cRunApp) getWatchPaths() []watchPath {
    method collectWatchPaths (line 338) | func (app *cRunApp) collectWatchPaths(dir string, ignorePatterns []str...
  constant cRunUsage (line 51) | cRunUsage = `gf run FILE [OPTION]`
  constant cRunBrief (line 52) | cRunBrief = `running go codes with hot-compiled-like feature`
  constant cRunEg (line 53) | cRunEg    = `
  constant cRunDc (line 60) | cRunDc = `
  constant cRunFileBrief (line 64) | cRunFileBrief          = `building file path.`
  constant cRunPathBrief (line 65) | cRunPathBrief          = `output directory path for built binary file. i...
  constant cRunExtraBrief (line 66) | cRunExtraBrief         = `the same options as "go run"/"go build" except...
  constant cRunArgsBrief (line 67) | cRunArgsBrief          = `custom arguments for your process`
  constant cRunWatchPathsBrief (line 68) | cRunWatchPathsBrief    = `watch additional paths for live reload, separa...
  constant cRunIgnorePatternBrief (line 69) | cRunIgnorePatternBrief = `custom ignore patterns for watch, separated by...
  function init (line 74) | func init() {
  type cRunInput (line 90) | type cRunInput struct
  type cRunOutput (line 99) | type cRunOutput struct
  function isIgnoredDirName (line 420) | func isIgnoredDirName(name string, ignorePatterns []string) bool {
  function parseCommaSeparatedArgs (line 432) | func parseCommaSeparatedArgs(args []string) []string {

FILE: cmd/gf/internal/cmd/cmd_tpl.go
  type cTpl (line 27) | type cTpl struct
    method Parse (line 71) | func (c *cTpl) Parse(ctx context.Context, in cTplParseInput) (out *cTp...
    method parsePath (line 95) | func (c *cTpl) parsePath(ctx context.Context, values g.Map, in cTplPar...
    method parseFile (line 129) | func (c *cTpl) parseFile(ctx context.Context, file string, output stri...
    method loadValues (line 149) | func (c *cTpl) loadValues(ctx context.Context, valuesPath string) (dat...
  constant cTplBrief (line 32) | cTplBrief = `template parsing and building commands`
  constant cTplDc (line 33) | cTplDc    = `
  constant cTplParseBrief (line 38) | cTplParseBrief = `parse either template file or folder with multiple typ...
  constant cTplParseEg (line 39) | cTplParseEg    = `
  constant cTplSupportValuesFilePattern (line 45) | cTplSupportValuesFilePattern = `*.json,*.xml,*.yaml,*.yml,*.toml,*.ini`
  type cTplParseInput (line 49) | type cTplParseInput struct
  type cTplParseOutput (line 59) | type cTplParseOutput struct
  function init (line 62) | func init() {

FILE: cmd/gf/internal/cmd/cmd_up.go
  type cUp (line 32) | type cUp struct
    method Index (line 69) | func (c cUp) Index(ctx context.Context, in cUpInput) (out *cUpOutput, ...
    method doUpgradeVersion (line 118) | func (c cUp) doUpgradeVersion(ctx context.Context, in cUpInput) (out *...
    method doUpgradeCLI (line 182) | func (c cUp) doUpgradeCLI(ctx context.Context, in cUpInput) (err error) {
    method doUpgradeCLIWithHttpDownload (line 196) | func (c cUp) doUpgradeCLIWithHttpDownload(ctx context.Context) (err er...
    method doUpgradeCLIWithGoInstall (line 239) | func (c cUp) doUpgradeCLIWithGoInstall(ctx context.Context, in cUpInpu...
    method doAutoFixing (line 274) | func (c cUp) doAutoFixing(ctx context.Context, dirPath string, version...
  constant gfPackage (line 37) | gfPackage = `github.com/gogf/gf/`
  constant cUpEg (line 38) | cUpEg     = `
  constant cliMethodHttpDownload (line 46) | cliMethodHttpDownload = "http"
  constant cliMethodGoInstall (line 47) | cliMethodGoInstall    = "install"
  function init (line 50) | func init() {
  type cUpInput (line 56) | type cUpInput struct
  type cUpOutput (line 67) | type cUpOutput struct
  type doUpgradeVersionOutput (line 109) | type doUpgradeVersionOutput struct
  type doUpgradeVersionOutputItem (line 113) | type doUpgradeVersionOutputItem struct

FILE: cmd/gf/internal/cmd/cmd_version.go
  constant defaultIndent (line 34) | defaultIndent = "{{indent}}"
  type cVersion (line 37) | type cVersion struct
    method Index (line 47) | func (c cVersion) Index(ctx context.Context, in cVersionInput) (*cVers...
    method getGFVersionOfCurrentProject (line 133) | func (c cVersion) getGFVersionOfCurrentProject() (string, error) {
  type cVersionInput (line 41) | type cVersionInput struct
  type cVersionOutput (line 45) | type cVersionOutput struct
  type detailBuffer (line 92) | type detailBuffer struct
    method appendLine (line 97) | func (d *detailBuffer) appendLine(indentLevel int, line string) {
    method replaceAllIndent (line 102) | func (d *detailBuffer) replaceAllIndent(indentStr string) string {
  function getGoFrameVersion (line 107) | func getGoFrameVersion(indentLevel int) (gfVersion string) {
  function getGoVersion (line 122) | func getGoVersion() (goVersion string, ok bool) {

FILE: cmd/gf/internal/cmd/cmd_z_init_test.go
  function init (line 25) | func init() {
  function dropTableWithDb (line 39) | func dropTableWithDb(db gdb.DB, table string) {
  function dropTableStd (line 47) | func dropTableStd(db gdb.DB, table string) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_build_test.go
  function Test_Build_Single (line 18) | func Test_Build_Single(t *testing.T) {
  function Test_Build_Single_Output (line 42) | func Test_Build_Single_Output(t *testing.T) {
  function Test_Build_Single_Path (line 66) | func Test_Build_Single_Path(t *testing.T) {
  function Test_Build_Single_VarMap (line 91) | func Test_Build_Single_VarMap(t *testing.T) {
  function Test_Build_Multiple (line 122) | func Test_Build_Multiple(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_env_test.go
  function Test_Env_Index (line 17) | func Test_Env_Index(t *testing.T) {
  function Test_Env_ParseGoEnvOutput (line 25) | func Test_Env_ParseGoEnvOutput(t *testing.T) {
  function Test_Env_ParseGoEnvOutput_WithWarnings (line 47) | func Test_Env_ParseGoEnvOutput_WithWarnings(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_fix_test.go
  function Test_Fix_doFixV25Content (line 16) | func Test_Fix_doFixV25Content(t *testing.T) {
  function Test_Fix_doFixV25Content_WithReplacement (line 27) | func Test_Fix_doFixV25Content_WithReplacement(t *testing.T) {
  function Test_Fix_doFixV25Content_NoMatch (line 43) | func Test_Fix_doFixV25Content_NoMatch(t *testing.T) {
  function Test_Fix_doFixV25Content_MultipleMatches (line 61) | func Test_Fix_doFixV25Content_MultipleMatches(t *testing.T) {
  function Test_Fix_doFixV25Content_EmptyContent (line 78) | func Test_Fix_doFixV25Content_EmptyContent(t *testing.T) {
  function Test_Fix_doFixV25Content_ComplexPath (line 90) | func Test_Fix_doFixV25Content_ComplexPath(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_ctrl_test.go
  function Test_Gen_Ctrl_Default (line 21) | func Test_Gen_Ctrl_Default(t *testing.T) {
  function Test_Gen_Ctrl_Default_Multi (line 87) | func Test_Gen_Ctrl_Default_Multi(t *testing.T) {
  function expectFilesContent (line 185) | func expectFilesContent(t *gtest.T, paths []string, expectPaths []string) {
  function Test_Gen_Ctrl_UseMerge_AddNewFile (line 195) | func Test_Gen_Ctrl_UseMerge_AddNewFile(t *testing.T) {
  function Test_Gen_Ctrl_UseMerge_AddNewCtrl (line 276) | func Test_Gen_Ctrl_UseMerge_AddNewCtrl(t *testing.T) {
  function Test_Gen_Ctrl_UseMerge_Issue3460 (line 359) | func Test_Gen_Ctrl_UseMerge_Issue3460(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_dao_issue_test.go
  function Test_Gen_Dao_Issue2572 (line 27) | func Test_Gen_Dao_Issue2572(t *testing.T) {
  function Test_Gen_Dao_Issue2616 (line 117) | func Test_Gen_Dao_Issue2616(t *testing.T) {
  function Test_Gen_Dao_Issue2746 (line 218) | func Test_Gen_Dao_Issue2746(t *testing.T) {
  function Test_Gen_Dao_Issue3459 (line 295) | func Test_Gen_Dao_Issue3459(t *testing.T) {
  function Test_Gen_Dao_Issue3749 (line 393) | func Test_Gen_Dao_Issue3749(t *testing.T) {
  function Test_Gen_Dao_Issue4629_TablesPattern_Star (line 466) | func Test_Gen_Dao_Issue4629_TablesPattern_Star(t *testing.T) {
  function Test_Gen_Dao_Issue4629_TablesPattern_Multiple (line 532) | func Test_Gen_Dao_Issue4629_TablesPattern_Multiple(t *testing.T) {
  function Test_Gen_Dao_Issue4629_TablesPattern_Mixed (line 598) | func Test_Gen_Dao_Issue4629_TablesPattern_Mixed(t *testing.T) {
  function Test_Gen_Dao_Issue4629_TablesPattern_Question (line 664) | func Test_Gen_Dao_Issue4629_TablesPattern_Question(t *testing.T) {
  function Test_Gen_Dao_Issue4629_TablesPattern_ExactNames (line 726) | func Test_Gen_Dao_Issue4629_TablesPattern_ExactNames(t *testing.T) {
  function Test_Gen_Dao_Issue4629_TablesPattern_PgSql (line 789) | func Test_Gen_Dao_Issue4629_TablesPattern_PgSql(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_dao_sharding_test.go
  function Test_Gen_Dao_Sharding_Overlapping (line 25) | func Test_Gen_Dao_Sharding_Overlapping(t *testing.T) {
  function Test_Gen_Dao_Sharding (line 107) | func Test_Gen_Dao_Sharding(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_dao_test.go
  function Test_Gen_Dao_Default (line 24) | func Test_Gen_Dao_Default(t *testing.T) {
  function Test_Gen_Dao_TypeMapping (line 117) | func Test_Gen_Dao_TypeMapping(t *testing.T) {
  function Test_Gen_Dao_FieldMapping (line 220) | func Test_Gen_Dao_FieldMapping(t *testing.T) {
  function execSqlFile (line 324) | func execSqlFile(db gdb.DB, filePath string, args ...any) error {
  function Test_Gen_Dao_Sqlite3 (line 338) | func Test_Gen_Dao_Sqlite3(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_enums_test.go
  function Test_Gen_Enums_Issue4387_RelativePath (line 24) | func Test_Gen_Enums_Issue4387_RelativePath(t *testing.T) {
  function Test_Gen_Enums_AbsolutePath (line 74) | func Test_Gen_Enums_AbsolutePath(t *testing.T) {
  function Test_Gen_Enums_Issue4387_Monorepo (line 111) | func Test_Gen_Enums_Issue4387_Monorepo(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_pb_test.go
  function TestGenPbIssue3882 (line 21) | func TestGenPbIssue3882(t *testing.T) {
  function TestGenPbIssue3953 (line 55) | func TestGenPbIssue3953(t *testing.T) {
  function TestGenPb_MultipleTags (line 92) | func TestGenPb_MultipleTags(t *testing.T) {
  function TestGenPb_NestedMessage (line 128) | func TestGenPb_NestedMessage(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_pbentity_test.go
  function Test_Gen_Pbentity_Default (line 23) | func Test_Gen_Pbentity_Default(t *testing.T) {
  function Test_Gen_Pbentity_NameCase_SnakeScreaming (line 88) | func Test_Gen_Pbentity_NameCase_SnakeScreaming(t *testing.T) {
  function Test_Issue_3545 (line 154) | func Test_Issue_3545(t *testing.T) {
  function Test_Issue_3685 (line 220) | func Test_Issue_3685(t *testing.T) {
  function Test_Issue_3955 (line 291) | func Test_Issue_3955(t *testing.T) {
  function Test_Issue_4330_TypeMapping_Ineffective (line 371) | func Test_Issue_4330_TypeMapping_Ineffective(t *testing.T) {
  function Test_Gen_Pbentity_Sharding (line 444) | func Test_Gen_Pbentity_Sharding(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_gen_service_test.go
  function Test_Gen_Service_Default (line 21) | func Test_Gen_Service_Default(t *testing.T) {
  function Test_Issue3328 (line 81) | func Test_Issue3328(t *testing.T) {
  function Test_Issue3835 (line 124) | func Test_Issue3835(t *testing.T) {
  function Test_Gen_Service_CamelCase (line 160) | func Test_Gen_Service_CamelCase(t *testing.T) {
  function Test_Gen_Service_PackagesFilter (line 203) | func Test_Gen_Service_PackagesFilter(t *testing.T) {
  function Test_Issue4242 (line 247) | func Test_Issue4242(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_pack_test.go
  function Test_Pack_ToGoFile (line 20) | func Test_Pack_ToGoFile(t *testing.T) {
  function Test_Pack_ToBinaryFile (line 64) | func Test_Pack_ToBinaryFile(t *testing.T) {
  function Test_Pack_MultipleSources (line 100) | func Test_Pack_MultipleSources(t *testing.T) {
  function Test_Pack_WithPrefix (line 144) | func Test_Pack_WithPrefix(t *testing.T) {
  function Test_Pack_WithKeepPath (line 182) | func Test_Pack_WithKeepPath(t *testing.T) {
  function Test_Pack_AutoPackageName (line 223) | func Test_Pack_AutoPackageName(t *testing.T) {
  function Test_Pack_EmptySource (line 262) | func Test_Pack_EmptySource(t *testing.T) {
  function Test_Pack_NestedDirectories (line 295) | func Test_Pack_NestedDirectories(t *testing.T) {

FILE: cmd/gf/internal/cmd/cmd_z_unit_run_test.go
  function Test_cRunApp_getWatchPaths_Basic (line 19) | func Test_cRunApp_getWatchPaths_Basic(t *testing.T) {
  function Test_cRunApp_getWatchPaths_EmptyWatchPaths (line 33) | func Test_cRunApp_getWatchPaths_EmptyWatchPaths(t *testing.T) {
  function Test_cRunApp_getWatchPaths_CustomIgnorePattern (line 45) | func Test_cRunApp_getWatchPaths_CustomIgnorePattern(t *testing.T) {
  function Test_cRunApp_getWatchPaths_WithIgnoredDirectories (line 62) | func Test_cRunApp_getWatchPaths_WithIgnoredDirectories(t *testing.T) {
  function Test_cRunApp_getWatchPaths_NoIgnoredDirectories (line 96) | func Test_cRunApp_getWatchPaths_NoIgnoredDirectories(t *testing.T) {
  function Test_cRunApp_getWatchPaths_CustomIgnorePatterns (line 122) | func Test_cRunApp_getWatchPaths_CustomIgnorePatterns(t *testing.T) {
  function Test_cRunApp_getWatchPaths_DeepNestedStructure (line 155) | func Test_cRunApp_getWatchPaths_DeepNestedStructure(t *testing.T) {
  function Test_cRunApp_getWatchPaths_MultipleRoots (line 187) | func Test_cRunApp_getWatchPaths_MultipleRoots(t *testing.T) {
  function Test_cRunApp_getWatchPaths_NonExistentDirectory (line 223) | func Test_cRunApp_getWatchPaths_NonExistentDirectory(t *testing.T) {
  function Test_isIgnoredDirName (line 246) | func Test_isIgnoredDirName(t *testing.T) {
  function Test_cRunApp_getWatchPaths_DeeplyNestedIgnore (line 265) | func Test_cRunApp_getWatchPaths_DeeplyNestedIgnore(t *testing.T) {
  function Test_cRunApp_getWatchPaths_EmptyDirectory (line 318) | func Test_cRunApp_getWatchPaths_EmptyDirectory(t *testing.T) {

FILE: cmd/gf/internal/cmd/genctrl/genctrl.go
  constant CGenCtrlConfig (line 23) | CGenCtrlConfig = `gfcli.gen.ctrl`
  constant CGenCtrlUsage (line 24) | CGenCtrlUsage  = `gf gen ctrl [OPTION]`
  constant CGenCtrlBrief (line 25) | CGenCtrlBrief  = `parse api definitions to generate controller/sdk go fi...
  constant CGenCtrlEg (line 26) | CGenCtrlEg     = `
  constant CGenCtrlBriefSrcFolder (line 29) | CGenCtrlBriefSrcFolder     = `source folder path to be parsed. default: ...
  constant CGenCtrlBriefDstFolder (line 30) | CGenCtrlBriefDstFolder     = `destination folder path storing automatica...
  constant CGenCtrlBriefWatchFile (line 31) | CGenCtrlBriefWatchFile     = `used in file watcher, it re-generates go f...
  constant CGenCtrlBriefSdkPath (line 32) | CGenCtrlBriefSdkPath       = `also generate SDK go files for api definit...
  constant CGenCtrlBriefSdkStdVersion (line 33) | CGenCtrlBriefSdkStdVersion = `use standard version prefix for generated ...
  constant CGenCtrlBriefSdkNoV1 (line 34) | CGenCtrlBriefSdkNoV1       = `do not add version suffix for interface mo...
  constant CGenCtrlBriefClear (line 35) | CGenCtrlBriefClear         = `auto delete generated and unimplemented co...
  constant CGenCtrlControllerMerge (line 36) | CGenCtrlControllerMerge    = `generate all controller files into one go ...
  constant PatternCtrlDefinition (line 40) | PatternCtrlDefinition = `func\s+\(.+?\)\s+\w+\(.+?\*(\w+)\.(\w+)Req\)\s+...
  constant genCtrlFileLockSeconds (line 44) | genCtrlFileLockSeconds = 10
  function init (line 47) | func init() {
  type CGenCtrl (line 65) | type CGenCtrl struct
    method Ctrl (line 80) | func (c CGenCtrl) Ctrl(ctx context.Context, in CGenCtrlInput) (out *CG...
    method generateByWatchFile (line 102) | func (c CGenCtrl) generateByWatchFile(watchFile, sdkPath string, sdkSt...
    method generateByModules (line 150) | func (c CGenCtrl) generateByModules(in CGenCtrlInput) (err error) {
    method generateByModule (line 200) | func (c CGenCtrl) generateByModule(
  type CGenCtrlInput (line 66) | type CGenCtrlInput struct
  type CGenCtrlOutput (line 77) | type CGenCtrlOutput struct

FILE: cmd/gf/internal/cmd/genctrl/genctrl_api_item.go
  type apiItem (line 15) | type apiItem struct
    method String (line 24) | func (a apiItem) String() string {
    method GetComment (line 31) | func (a apiItem) GetComment() string {

FILE: cmd/gf/internal/cmd/genctrl/genctrl_ast_parse.go
  type structInfo (line 20) | type structInfo struct
  method getStructsNameInSrc (line 27) | func (c CGenCtrl) getStructsNameInSrc(filePath string) (structInfos []*s...
  method getImportsInDst (line 76) | func (c CGenCtrl) getImportsInDst(filePath string) (imports []string, er...

FILE: cmd/gf/internal/cmd/genctrl/genctrl_ast_parse_clear.go
  method getFuncInDst (line 20) | func (c *controllerClearer) getFuncInDst(filePath string) (funcs []strin...

FILE: cmd/gf/internal/cmd/genctrl/genctrl_calculate.go
  method getApiItemsInSrc (line 17) | func (c CGenCtrl) getApiItemsInSrc(apiModuleFolderPath string) (items []...
  method getApiItemsInDst (line 60) | func (c CGenCtrl) getApiItemsInDst(dstFolder string) (items []apiItem, e...

FILE: cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go
  type controllerGenerator (line 26) | type controllerGenerator struct
    method Generate (line 32) | func (c *controllerGenerator) Generate(dstModuleFolderPath string, api...
    method getSubItemsByModuleAndVersion (line 68) | func (c *controllerGenerator) getSubItemsByModuleAndVersion(items []ap...
    method doGenerateCtrlNewByModuleAndVersion (line 77) | func (c *controllerGenerator) doGenerateCtrlNewByModuleAndVersion(
    method doGenerateCtrlItem (line 132) | func (c *controllerGenerator) doGenerateCtrlItem(dstModuleFolderPath s...
    method doGenerateCtrlMergeItem (line 175) | func (c *controllerGenerator) doGenerateCtrlMergeItem(dstModuleFolderP...
  function newControllerGenerator (line 28) | func newControllerGenerator() *controllerGenerator {
  function methodExists (line 248) | func methodExists(filePath, ctrlName, methodName string) bool {

FILE: cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl_clear.go
  type controllerClearer (line 18) | type controllerClearer struct
    method Clear (line 24) | func (c *controllerClearer) Clear(dstModuleFolderPath string, extraApi...
    method doClear (line 33) | func (c *controllerClearer) doClear(dstModuleFolderPath string, item a...
  function newControllerClearer (line 20) | func newControllerClearer() *controllerClearer {

FILE: cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go
  type apiInterfaceGenerator (line 25) | type apiInterfaceGenerator struct
    method Generate (line 31) | func (c *apiInterfaceGenerator) Generate(apiModuleFolderPath string, a...
    method doGenerate (line 42) | func (c *apiInterfaceGenerator) doGenerate(apiModuleFolderPath string,...
    method getSubItemsByModule (line 102) | func (c *apiInterfaceGenerator) getSubItemsByModule(items []apiItem, m...
    method getSubItemsByModuleAndVersion (line 111) | func (c *apiInterfaceGenerator) getSubItemsByModuleAndVersion(items []...
  function newApiInterfaceGenerator (line 27) | func newApiInterfaceGenerator() *apiInterfaceGenerator {

FILE: cmd/gf/internal/cmd/genctrl/genctrl_generate_sdk.go
  type apiSdkGenerator (line 23) | type apiSdkGenerator struct
    method Generate (line 29) | func (c *apiSdkGenerator) Generate(apiModuleApiItems []apiItem, sdkFol...
    method doGenerateSdkPkgFile (line 56) | func (c *apiSdkGenerator) doGenerateSdkPkgFile(sdkFolderPath string) (...
    method doGenerateSdkIClient (line 73) | func (c *apiSdkGenerator) doGenerateSdkIClient(
    method doGenerateSdkImplementer (line 142) | func (c *apiSdkGenerator) doGenerateSdkImplementer(
    method getSubItemsByModuleAndVersion (line 192) | func (c *apiSdkGenerator) getSubItemsByModuleAndVersion(items []apiIte...
  function newApiSdkGenerator (line 25) | func newApiSdkGenerator() *apiSdkGenerator {

FILE: cmd/gf/internal/cmd/gendao/gendao.go
  type CGenDao (line 36) | type CGenDao struct
    method Dao (line 129) | func (c CGenDao) Dao(ctx context.Context, in CGenDaoInput) (out *CGenD...
  type CGenDaoInput (line 37) | type CGenDaoInput struct
  type CGenDaoOutput (line 75) | type CGenDaoOutput struct
  type CGenDaoInternalInput (line 77) | type CGenDaoInternalInput struct
  type CustomAttributeType (line 86) | type CustomAttributeType struct
  function doGenDaoForArray (line 151) | func doGenDaoForArray(ctx context.Context, index int, in CGenDaoInput) {
  function getImportPartContent (line 335) | func getImportPartContent(ctx context.Context, source string, isDo bool,...
  function assignDefaultVar (line 388) | func assignDefaultVar(view *gview.View, in CGenDaoInternalInput) {
  function sortFieldKeyForDao (line 402) | func sortFieldKeyForDao(fieldMap map[string]*gdb.TableField) []string {
  function getTemplateFromPathOrDefault (line 426) | func getTemplateFromPathOrDefault(filePath string, def string) string {
  function containsWildcard (line 436) | func containsWildcard(pattern string) bool {
  function patternToRegex (line 442) | func patternToRegex(pattern string) string {
  function filterTablesByPatterns (line 462) | func filterTablesByPatterns(allTables []string, patterns []string) []str...

FILE: cmd/gf/internal/cmd/gendao/gendao_clear.go
  function doClear (line 16) | func doClear(items *CGenDaoInternalGenItems) {
  function doClearItem (line 32) | func doClearItem(item CGenDaoInternalGenItem, allGeneratedFilePaths []st...

FILE: cmd/gf/internal/cmd/gendao/gendao_dao.go
  function generateDao (line 29) | func generateDao(ctx context.Context, in CGenDaoInternalInput) {
  type generateDaoSingleInput (line 51) | type generateDaoSingleInput struct
  function generateDaoSingle (line 63) | func generateDaoSingle(ctx context.Context, in generateDaoSingleInput) {
  type generateDaoIndexInput (line 108) | type generateDaoIndexInput struct
  function generateDaoIndex (line 116) | func generateDaoIndex(in generateDaoIndexInput) {
  type generateDaoInternalInput (line 150) | type generateDaoInternalInput struct
  function generateDaoInternal (line 159) | func generateDaoInternal(in generateDaoInternalInput) {
  function generateColumnNamesForDao (line 194) | func generateColumnNamesForDao(fieldMap map[string]*gdb.TableField, remo...
  function generateColumnDefinitionForDao (line 226) | func generateColumnDefinitionForDao(fieldMap map[string]*gdb.TableField,...

FILE: cmd/gf/internal/cmd/gendao/gendao_do.go
  function generateDo (line 25) | func generateDo(ctx context.Context, in CGenDaoInternalInput) {
  function generateDoContent (line 78) | func generateDoContent(

FILE: cmd/gf/internal/cmd/gendao/gendao_entity.go
  function generateEntity (line 23) | func generateEntity(ctx context.Context, in CGenDaoInternalInput) {
  function generateEntityContent (line 63) | func generateEntityContent(

FILE: cmd/gf/internal/cmd/gendao/gendao_gen_item.go
  type CGenDaoInternalGenItems (line 10) | type CGenDaoInternalGenItems struct
    method Scale (line 28) | func (i *CGenDaoInternalGenItems) Scale() {
    method SetClear (line 37) | func (i *CGenDaoInternalGenItems) SetClear(clear bool) {
    method AppendDirPath (line 41) | func (i *CGenDaoInternalGenItems) AppendDirPath(storageDirPath string) {
    method AppendGeneratedFilePath (line 48) | func (i *CGenDaoInternalGenItems) AppendGeneratedFilePath(generatedFil...
  type CGenDaoInternalGenItem (line 14) | type CGenDaoInternalGenItem struct
  function newCGenDaoInternalGenItems (line 21) | func newCGenDaoInternalGenItems() *CGenDaoInternalGenItems {

FILE: cmd/gf/internal/cmd/gendao/gendao_structure.go
  type generateStructDefinitionInput (line 23) | type generateStructDefinitionInput struct
  function generateStructDefinition (line 31) | func generateStructDefinition(ctx context.Context, in generateStructDefi...
  function getTypeMappingInfo (line 62) | func getTypeMappingInfo(
  function generateStructFieldDefinition (line 94) | func generateStructFieldDefinition(
  type FieldNameCase (line 184) | type FieldNameCase
  constant FieldNameCaseCamel (line 187) | FieldNameCaseCamel      FieldNameCase = "CaseCamel"
  constant FieldNameCaseCamelLower (line 188) | FieldNameCaseCamelLower FieldNameCase = "CaseCamelLower"
  function formatFieldName (line 192) | func formatFieldName(fieldName string, nameCase FieldNameCase) string {
  function isAllUpper (line 212) | func isAllUpper(fieldName string) bool {
  function formatComment (line 222) | func formatComment(comment string) string {

FILE: cmd/gf/internal/cmd/gendao/gendao_table.go
  function generateTable (line 29) | func generateTable(ctx context.Context, in CGenDaoInternalInput) {
  type generateTableSingleInput (line 53) | type generateTableSingleInput struct
  function generateTableSingle (line 63) | func generateTableSingle(ctx context.Context, in generateTableSingleInpu...
  function generateTableFields (line 108) | func generateTableFields(fields map[string]*gdb.TableField) string {
  function generateDefaultValue (line 137) | func generateDefaultValue(value interface{}) string {

FILE: cmd/gf/internal/cmd/gendao/gendao_tag.go
  constant CGenDaoConfig (line 15) | CGenDaoConfig = `gfcli.gen.dao`
  constant CGenDaoUsage (line 16) | CGenDaoUsage  = `gf gen dao [OPTION]`
  constant CGenDaoBrief (line 17) | CGenDaoBrief  = `automatically generate go files for dao/do/entity`
  constant CGenDaoEg (line 18) | CGenDaoEg     = `
  constant CGenDaoAd (line 25) | CGenDaoAd = `
  constant CGenDaoBriefPath (line 51) | CGenDaoBriefPath              = `directory path for generated files`
  constant CGenDaoBriefLink (line 52) | CGenDaoBriefLink              = `database configuration, the same as the...
  constant CGenDaoBriefTables (line 53) | CGenDaoBriefTables            = `generate models only for given tables, ...
  constant CGenDaoBriefTablesEx (line 54) | CGenDaoBriefTablesEx          = `generate models excluding given tables,...
  constant CGenDaoBriefPrefix (line 55) | CGenDaoBriefPrefix            = `add prefix for all table of specified l...
  constant CGenDaoBriefRemovePrefix (line 56) | CGenDaoBriefRemovePrefix      = `remove specified prefix of the table, m...
  constant CGenDaoBriefRemoveFieldPrefix (line 57) | CGenDaoBriefRemoveFieldPrefix = `remove specified prefix of the field, m...
  constant CGenDaoBriefStdTime (line 58) | CGenDaoBriefStdTime           = `use time.Time from stdlib instead of gt...
  constant CGenDaoBriefWithTime (line 59) | CGenDaoBriefWithTime          = `add created time for auto produced go f...
  constant CGenDaoBriefGJsonSupport (line 60) | CGenDaoBriefGJsonSupport      = `use gJsonSupport to use *gjson.Json ins...
  constant CGenDaoBriefImportPrefix (line 61) | CGenDaoBriefImportPrefix      = `custom import prefix for generated go f...
  constant CGenDaoBriefDaoPath (line 62) | CGenDaoBriefDaoPath           = `directory path for storing generated da...
  constant CGenDaoBriefTablePath (line 63) | CGenDaoBriefTablePath         = `directory path for storing generated ta...
  constant CGenDaoBriefDoPath (line 64) | CGenDaoBriefDoPath            = `directory path for storing generated do...
  constant CGenDaoBriefEntityPath (line 65) | CGenDaoBriefEntityPath        = `directory path for storing generated en...
  constant CGenDaoBriefOverwriteDao (line 66) | CGenDaoBriefOverwriteDao      = `overwrite all dao files both inside/out...
  constant CGenDaoBriefModelFile (line 67) | CGenDaoBriefModelFile         = `custom file name for storing generated ...
  constant CGenDaoBriefModelFileForDao (line 68) | CGenDaoBriefModelFileForDao   = `custom file name generating model for D...
  constant CGenDaoBriefDescriptionTag (line 69) | CGenDaoBriefDescriptionTag    = `add comment to description tag for each...
  constant CGenDaoBriefNoJsonTag (line 70) | CGenDaoBriefNoJsonTag         = `no json tag will be added for each field`
  constant CGenDaoBriefNoModelComment (line 71) | CGenDaoBriefNoModelComment    = `no model comment will be added for each...
  constant CGenDaoBriefClear (line 72) | CGenDaoBriefClear             = `delete all generated go files that do n...
  constant CGenDaoBriefGenTable (line 73) | CGenDaoBriefGenTable          = `generate table files`
  constant CGenDaoBriefTypeMapping (line 74) | CGenDaoBriefTypeMapping       = `custom local type mapping for generated...
  constant CGenDaoBriefFieldMapping (line 75) | CGenDaoBriefFieldMapping      = `custom local type mapping for generated...
  constant CGenDaoBriefShardingPattern (line 76) | CGenDaoBriefShardingPattern   = `sharding pattern for table name, e.g. "...
  constant CGenDaoBriefGroup (line 77) | CGenDaoBriefGroup             = `
  constant CGenDaoBriefJsonCase (line 81) | CGenDaoBriefJsonCase = `
  constant CGenDaoBriefTplDaoIndexPath (line 93) | CGenDaoBriefTplDaoIndexPath    = `template file path for dao index file`
  constant CGenDaoBriefTplDaoInternalPath (line 94) | CGenDaoBriefTplDaoInternalPath = `template file path for dao internal file`
  constant CGenDaoBriefTplDaoDoPathPath (line 95) | CGenDaoBriefTplDaoDoPathPath   = `template file path for dao do file`
  constant CGenDaoBriefTplDaoEntityPath (line 96) | CGenDaoBriefTplDaoEntityPath   = `template file path for dao entity file`
  constant tplVarTableName (line 98) | tplVarTableName               = `TplTableName`
  constant tplVarTableNameCamelCase (line 99) | tplVarTableNameCamelCase      = `TplTableNameCamelCase`
  constant tplVarTableNameCamelLowerCase (line 100) | tplVarTableNameCamelLowerCase = `TplTableNameCamelLowerCase`
  constant tplVarTableSharding (line 101) | tplVarTableSharding           = `TplTableSharding`
  constant tplVarTableShardingPrefix (line 102) | tplVarTableShardingPrefix     = `TplTableShardingPrefix`
  constant tplVarTableFields (line 103) | tplVarTableFields             = `TplTableFields`
  constant tplVarPackageImports (line 104) | tplVarPackageImports          = `TplPackageImports`
  constant tplVarImportPrefix (line 105) | tplVarImportPrefix            = `TplImportPrefix`
  constant tplVarStructDefine (line 106) | tplVarStructDefine            = `TplStructDefine`
  constant tplVarColumnDefine (line 107) | tplVarColumnDefine            = `TplColumnDefine`
  constant tplVarColumnNames (line 108) | tplVarColumnNames             = `TplColumnNames`
  constant tplVarGroupName (line 109) | tplVarGroupName               = `TplGroupName`
  constant tplVarDatetimeStr (line 110) | tplVarDatetimeStr             = `TplDatetimeStr`
  constant tplVarCreatedAtDatetimeStr (line 111) | tplVarCreatedAtDatetimeStr    = `TplCreatedAtDatetimeStr`
  constant tplVarPackageName (line 112) | tplVarPackageName             = `TplPackageName`
  function init (line 115) | func init() {

FILE: cmd/gf/internal/cmd/gendao/gendao_test.go
  function Test_containsWildcard (line 16) | func Test_containsWildcard(t *testing.T) {
  function Test_patternToRegex (line 28) | func Test_patternToRegex(t *testing.T) {
  function Test_filterTablesByPatterns_Star (line 44) | func Test_filterTablesByPatterns_Star(t *testing.T) {
  function Test_filterTablesByPatterns_Question (line 65) | func Test_filterTablesByPatterns_Question(t *testing.T) {
  function Test_filterTablesByPatterns_Mixed (line 84) | func Test_filterTablesByPatterns_Mixed(t *testing.T) {
  function Test_filterTablesByPatterns_ExactNames (line 100) | func Test_filterTablesByPatterns_ExactNames(t *testing.T) {
  function Test_filterTablesByPatterns_NoDuplicates (line 114) | func Test_filterTablesByPatterns_NoDuplicates(t *testing.T) {
  function Test_filterTablesByPatterns_NoMatch (line 134) | func Test_filterTablesByPatterns_NoMatch(t *testing.T) {
  function Test_filterTablesByPatterns_Empty (line 145) | func Test_filterTablesByPatterns_Empty(t *testing.T) {
  function Test_filterTablesByPatterns_MatchAll (line 160) | func Test_filterTablesByPatterns_MatchAll(t *testing.T) {
  function Test_filterTablesByPatterns_NonExistent (line 171) | func Test_filterTablesByPatterns_NonExistent(t *testing.T) {

FILE: cmd/gf/internal/cmd/genenums/genenums.go
  type CGenEnums (line 24) | type CGenEnums struct
    method Enums (line 53) | func (c CGenEnums) Enums(ctx context.Context, in CGenEnumsInput) (out ...
  type CGenEnumsInput (line 25) | type CGenEnumsInput struct
  type CGenEnumsOutput (line 31) | type CGenEnumsOutput struct
  constant CGenEnumsConfig (line 35) | CGenEnumsConfig = `gfcli.gen.enums`
  constant CGenEnumsBrief (line 36) | CGenEnumsBrief  = `parse go files in current project and generate enums ...
  constant CGenEnumsEg (line 37) | CGenEnumsEg     = `
  function init (line 45) | func init() {

FILE: cmd/gf/internal/cmd/genenums/genenums_parser.go
  constant pkgLoadMode (line 20) | pkgLoadMode = 0xffffff
  type EnumsParser (line 22) | type EnumsParser struct
    method ParsePackages (line 45) | func (p *EnumsParser) ParsePackages(pkgs []*packages.Package) {
    method ParsePackage (line 51) | func (p *EnumsParser) ParsePackage(pkg *packages.Package) {
    method Export (line 115) | func (p *EnumsParser) Export() string {
  type EnumItem (line 29) | type EnumItem struct
  function NewEnumsParser (line 36) | func NewEnumsParser(prefixes []string) *EnumsParser {
  function getStandardPackages (line 139) | func getStandardPackages() map[string]struct{} {

FILE: cmd/gf/internal/cmd/genenums/genenums_z_unit_test.go
  function Test_NewEnumsParser (line 22) | func Test_NewEnumsParser(t *testing.T) {
  function Test_NewEnumsParser_WithPrefixes (line 34) | func Test_NewEnumsParser_WithPrefixes(t *testing.T) {
  function Test_EnumsParser_Export_Empty (line 46) | func Test_EnumsParser_Export_Empty(t *testing.T) {
  function Test_EnumsParser_Export_WithEnums (line 55) | func Test_EnumsParser_Export_WithEnums(t *testing.T) {
  function Test_EnumsParser_Export_IntValues (line 101) | func Test_EnumsParser_Export_IntValues(t *testing.T) {
  function Test_EnumsParser_Export_FloatValues (line 124) | func Test_EnumsParser_Export_FloatValues(t *testing.T) {
  function Test_EnumsParser_Export_BoolValues (line 142) | func Test_EnumsParser_Export_BoolValues(t *testing.T) {
  function Test_EnumsParser_Export_StringValues (line 162) | func Test_EnumsParser_Export_StringValues(t *testing.T) {
  function Test_EnumsParser_Export_MixedTypes (line 182) | func Test_EnumsParser_Export_MixedTypes(t *testing.T) {
  function Test_EnumItem_Structure (line 203) | func Test_EnumItem_Structure(t *testing.T) {
  function Test_EnumsParser_ParsePackages_Integration (line 220) | func Test_EnumsParser_ParsePackages_Integration(t *testing.T) {
  function Test_EnumsParser_ParsePackages_WithPrefixes (line 297) | func Test_EnumsParser_ParsePackages_WithPrefixes(t *testing.T) {
  function Test_getStandardPackages (line 352) | func Test_getStandardPackages(t *testing.T) {

FILE: cmd/gf/internal/cmd/geninit/geninit.go
  type ProcessOptions (line 20) | type ProcessOptions struct
  function Process (line 27) | func Process(ctx context.Context, repo, name string, opts *ProcessOption...
  function processGoModule (line 65) | func processGoModule(ctx context.Context, repo, name string, opts *Proce...
  function processGitSubdir (line 191) | func processGitSubdir(ctx context.Context, repo, name string, opts *Proc...

FILE: cmd/gf/internal/cmd/geninit/geninit_ast.go
  type ASTReplacer (line 26) | type ASTReplacer struct
    method ReplaceInFile (line 42) | func (r *ASTReplacer) ReplaceInFile(ctx context.Context, filePath stri...
    method ReplaceInDir (line 92) | func (r *ASTReplacer) ReplaceInDir(ctx context.Context, dir string) er...
  function NewASTReplacer (line 33) | func NewASTReplacer(oldModule, newModule string) *ASTReplacer {
  function findGoFiles (line 111) | func findGoFiles(dir string) ([]string, error) {

FILE: cmd/gf/internal/cmd/geninit/geninit_downloader.go
  function downloadTemplate (line 24) | func downloadTemplate(ctx context.Context, repo string) (string, error) {
  function runCmd (line 105) | func runCmd(ctx context.Context, dir string, name string, args ...string...

FILE: cmd/gf/internal/cmd/geninit/geninit_env.go
  type GoEnv (line 20) | type GoEnv struct
  function CheckGoEnv (line 30) | func CheckGoEnv(ctx context.Context) (*GoEnv, error) {
  function CheckGitEnv (line 71) | func CheckGitEnv(ctx context.Context) (string, error) {

FILE: cmd/gf/internal/cmd/geninit/geninit_generator.go
  function generateProject (line 24) | func generateProject(ctx context.Context, srcPath, name, oldModule, newM...
  function tidyDependencies (line 95) | func tidyDependencies(ctx context.Context, projectDir string) error {
  function upgradeDependencies (line 105) | func upgradeDependencies(ctx context.Context, projectDir string) error {
  function formatGoFiles (line 121) | func formatGoFiles(dir string) {

FILE: cmd/gf/internal/cmd/geninit/geninit_git_downloader.go
  type GitRepoInfo (line 22) | type GitRepoInfo struct
  function ParseGitURL (line 36) | func ParseGitURL(url string) (*GitRepoInfo, error) {
  function IsSubdirRepo (line 78) | func IsSubdirRepo(url string) bool {
  function downloadGitSubdir (line 136) | func downloadGitSubdir(ctx context.Context, repoURL string) (string, *Gi...
  function GetModuleNameFromGoMod (line 226) | func GetModuleNameFromGoMod(dir string) string {

FILE: cmd/gf/internal/cmd/geninit/geninit_selector.go
  function SelectVersion (line 21) | func SelectVersion(ctx context.Context, versions []string, modulePath st...

FILE: cmd/gf/internal/cmd/geninit/geninit_version.go
  type VersionInfo (line 25) | type VersionInfo struct
  function GetModuleVersions (line 32) | func GetModuleVersions(ctx context.Context, modulePath string) (*Version...
  function getLatestOnly (line 98) | func getLatestOnly(ctx context.Context, tempDir, modulePath string) (*Ve...
  function GetLatestVersion (line 129) | func GetLatestVersion(ctx context.Context, modulePath string) (string, e...

FILE: cmd/gf/internal/cmd/geninit/geninit_z_unit_test.go
  function Test_ParseGitURL_Basic (line 19) | func Test_ParseGitURL_Basic(t *testing.T) {
  function Test_ParseGitURL_WithHTTPS (line 33) | func Test_ParseGitURL_WithHTTPS(t *testing.T) {
  function Test_ParseGitURL_WithGitSuffix (line 44) | func Test_ParseGitURL_WithGitSuffix(t *testing.T) {
  function Test_ParseGitURL_WithSubPath (line 55) | func Test_ParseGitURL_WithSubPath(t *testing.T) {
  function Test_ParseGitURL_WithTreeBranch (line 68) | func Test_ParseGitURL_WithTreeBranch(t *testing.T) {
  function Test_ParseGitURL_WithVersion (line 81) | func Test_ParseGitURL_WithVersion(t *testing.T) {
  function Test_ParseGitURL_Invalid (line 93) | func Test_ParseGitURL_Invalid(t *testing.T) {
  function Test_IsSubdirRepo_NotSubdir (line 101) | func Test_IsSubdirRepo_NotSubdir(t *testing.T) {
  function Test_IsSubdirRepo_GoModuleWithCmd (line 109) | func Test_IsSubdirRepo_GoModuleWithCmd(t *testing.T) {
  function Test_IsSubdirRepo_ActualSubdir (line 117) | func Test_IsSubdirRepo_ActualSubdir(t *testing.T) {
  function Test_GetModuleNameFromGoMod_Valid (line 125) | func Test_GetModuleNameFromGoMod_Valid(t *testing.T) {
  function Test_GetModuleNameFromGoMod_NoFile (line 151) | func Test_GetModuleNameFromGoMod_NoFile(t *testing.T) {
  function Test_GetModuleNameFromGoMod_SimpleModule (line 165) | func Test_GetModuleNameFromGoMod_SimpleModule(t *testing.T) {
  function Test_ASTReplacer_ReplaceInFile (line 187) | func Test_ASTReplacer_ReplaceInFile(t *testing.T) {
  function Test_ASTReplacer_ReplaceInDir (line 234) | func Test_ASTReplacer_ReplaceInDir(t *testing.T) {
  function Test_findGoFiles (line 286) | func Test_findGoFiles(t *testing.T) {
  function Test_findGoFiles_EmptyDir (line 332) | func Test_findGoFiles_EmptyDir(t *testing.T) {
  function contains (line 348) | func contains(s, substr string) bool {
  function containsAt (line 352) | func containsAt(s, substr string) bool {

FILE: cmd/gf/internal/cmd/genpb/genpb.go
  type CGenPb (line 21) | type CGenPb struct
    method Pb (line 48) | func (c CGenPb) Pb(ctx context.Context, in CGenPbInput) (out *CGenPbOu...
  type CGenPbInput (line 22) | type CGenPbInput struct
  type CGenPbOutput (line 28) | type CGenPbOutput struct
  constant CGenPbConfig (line 32) | CGenPbConfig = `gfcli.gen.pb`
  constant CGenPbBrief (line 33) | CGenPbBrief  = `parse proto files and generate protobuf go files`
  constant CGenPbEg (line 34) | CGenPbEg     = `
  function init (line 40) | func init() {

FILE: cmd/gf/internal/cmd/genpb/genpb_controller.go
  type generateControllerInput (line 22) | type generateControllerInput struct
  type generateCtrl (line 27) | type generateCtrl struct
  type generateCtrlMethod (line 34) | type generateCtrlMethod struct
  constant controllerTemplate (line 40) | controllerTemplate = `
  constant controllerMethodTemplate (line 51) | controllerMethodTemplate = `
  method generateController (line 58) | func (c CGenPb) generateController(ctx context.Context, in generateContr...
  method parseControllers (line 79) | func (c CGenPb) parseControllers(filePath string) ([]generateCtrl, error) {
  method doGenerateControllers (line 128) | func (c CGenPb) doGenerateControllers(in generateControllerInput, contro...
  method doGenerateController (line 139) | func (c CGenPb) doGenerateController(in generateControllerInput, control...

FILE: cmd/gf/internal/cmd/genpb/genpb_tag.go
  type generateStructTagInput (line 23) | type generateStructTagInput struct
  method generateStructTag (line 27) | func (c CGenPb) generateStructTag(ctx context.Context, in generateStruct...
  method doTagReplacement (line 47) | func (c CGenPb) doTagReplacement(ctx context.Context, content string) (s...
  method tagCommentIntoListMap (line 89) | func (c CGenPb) tagCommentIntoListMap(comment string, lineTagMap *gmap.L...
  method listMapToStructTag (line 110) | func (c CGenPb) listMapToStructTag(lineTagMap *gmap.ListMap) string {

FILE: cmd/gf/internal/cmd/genpbentity/genpbentity.go
  type CGenPbEntity (line 39) | type CGenPbEntity struct
    method PbEntity (line 265) | func (c CGenPbEntity) PbEntity(ctx context.Context, in CGenPbEntityInp...
  type CGenPbEntityInput (line 40) | type CGenPbEntityInput struct
  type CGenPbEntityOutput (line 59) | type CGenPbEntityOutput struct
  type CGenPbEntityInternalInput (line 61) | type CGenPbEntityInternalInput struct
  type CustomAttributeType (line 70) | type CustomAttributeType struct
  constant defaultPackageSuffix (line 77) | defaultPackageSuffix = `api/pbentity`
  constant CGenPbEntityConfig (line 78) | CGenPbEntityConfig   = `gfcli.gen.pbentity`
  constant CGenPbEntityBrief (line 79) | CGenPbEntityBrief    = `generate entity message files in protobuf3 format`
  constant CGenPbEntityEg (line 80) | CGenPbEntityEg       = `
  constant CGenPbEntityAd (line 88) | CGenPbEntityAd = `
  constant CGenPbEntityBriefPath (line 118) | CGenPbEntityBriefPath              = `directory path for generated files...
  constant CGenPbEntityBriefPackage (line 119) | CGenPbEntityBriefPackage           = `package path for all entity proto ...
  constant CGenPbEntityBriefGoPackage (line 120) | CGenPbEntityBriefGoPackage         = `go package path for all entity pro...
  constant CGenPbEntityBriefLink (line 121) | CGenPbEntityBriefLink              = `database configuration, the same a...
  constant CGenPbEntityBriefTables (line 122) | CGenPbEntityBriefTables            = `generate models only for given tab...
  constant CGenPbEntityBriefPrefix (line 123) | CGenPbEntityBriefPrefix            = `add specified prefix for all entit...
  constant CGenPbEntityBriefRemovePrefix (line 124) | CGenPbEntityBriefRemovePrefix      = `remove specified prefix of the tab...
  constant CGenPbEntityBriefTablesEx (line 125) | CGenPbEntityBriefTablesEx          = `generate all models exclude the sp...
  constant CGenPbEntityBriefRemoveFieldPrefix (line 126) | CGenPbEntityBriefRemoveFieldPrefix = `remove specified prefix of the fie...
  constant CGenPbEntityBriefOption (line 127) | CGenPbEntityBriefOption            = `extra protobuf options`
  constant CGenPbEntityBriefShardingPattern (line 128) | CGenPbEntityBriefShardingPattern   = `sharding pattern for table name, e...
  constant CGenPbEntityBriefGroup (line 129) | CGenPbEntityBriefGroup             = `
  constant CGenPbEntityBriefNameCase (line 134) | CGenPbEntityBriefNameCase = `
  constant CGenPbEntityBriefJsonCase (line 147) | CGenPbEntityBriefJsonCase = `
  constant CGenPbEntityBriefTypeMapping (line 152) | CGenPbEntityBriefTypeMapping  = `custom local type mapping for generated...
  constant CGenPbEntityBriefFieldMapping (line 153) | CGenPbEntityBriefFieldMapping = `custom local type mapping for generated...
  function init (line 240) | func init() {
  function doGenPbEntityForArray (line 285) | func doGenPbEntityForArray(ctx context.Context, index int, in CGenPbEnti...
  function generatePbEntityContentFile (line 392) | func generatePbEntityContentFile(ctx context.Context, in CGenPbEntityInt...
  function generateEntityMessageDefinition (line 434) | func generateEntityMessageDefinition(entityName string, fieldMap map[str...
  function generateMessageFieldForPbEntity (line 475) | func generateMessageFieldForPbEntity(index int, field *gdb.TableField, i...
  function getTplPbEntityContent (line 554) | func getTplPbEntityContent(tplEntityPath string) string {
  function formatCase (line 562) | func formatCase(str, caseStr string) string {
  function sortFieldKeyForPbEntity (line 569) | func sortFieldKeyForPbEntity(fieldMap map[string]*gdb.TableField) []stri...

FILE: cmd/gf/internal/cmd/genservice/genservice.go
  constant CGenServiceConfig (line 32) | CGenServiceConfig = `gfcli.gen.service`
  constant CGenServiceUsage (line 33) | CGenServiceUsage  = `gf gen service [OPTION]`
  constant CGenServiceBrief (line 34) | CGenServiceBrief  = `parse struct and associated functions from packages...
  constant CGenServiceEg (line 35) | CGenServiceEg     = `
  constant CGenServiceBriefSrcFolder (line 39) | CGenServiceBriefSrcFolder    = `source folder path to be parsed. default...
  constant CGenServiceBriefDstFolder (line 40) | CGenServiceBriefDstFolder    = `destination folder path storing automati...
  constant CGenServiceBriefFileNameCase (line 41) | CGenServiceBriefFileNameCase = `
  constant CGenServiceBriefWatchFile (line 54) | CGenServiceBriefWatchFile    = `used in file watcher, it re-generates al...
  constant CGenServiceBriefStPattern (line 55) | CGenServiceBriefStPattern    = `regular expression matching struct name ...
  constant CGenServiceBriefPackages (line 56) | CGenServiceBriefPackages     = `produce go files only for given source p...
  constant CGenServiceBriefImportPrefix (line 57) | CGenServiceBriefImportPrefix = `custom import prefix to calculate import...
  constant CGenServiceBriefClear (line 58) | CGenServiceBriefClear        = `delete all generated go files that are n...
  function init (line 61) | func init() {
  type CGenService (line 79) | type CGenService struct
    method Service (line 112) | func (c CGenService) Service(ctx context.Context, in CGenServiceInput)...
    method checkAndUpdateMain (line 340) | func (c CGenService) checkAndUpdateMain(srcFolder string) (err error) {
  type CGenServiceInput (line 80) | type CGenServiceInput struct
  type CGenServiceOutput (line 91) | type CGenServiceOutput struct
  constant genServiceFileLockSeconds (line 95) | genServiceFileLockSeconds = 10
  type fileInfo (line 98) | type fileInfo struct
  type folderInfo (line 103) | type folderInfo struct

FILE: cmd/gf/internal/cmd/genservice/genservice_ast_parse.go
  type pkgItem (line 20) | type pkgItem struct
  type funcItem (line 26) | type funcItem struct
  method parseItemsInSrc (line 37) | func (c CGenService) parseItemsInSrc(filePath string) (pkgItems []pkgIte...
  method parseImportPackages (line 171) | func (c CGenService) parseImportPackages(node *ast.ImportSpec) (packages...
  method getRealAlias (line 203) | func (c CGenService) getRealAlias(importPath string) (pkgName string) {
  method parseFuncReceiverTypeName (line 232) | func (c CGenService) parseFuncReceiverTypeName(node *ast.FuncDecl) (rece...
  method parseFuncParams (line 248) | func (c CGenService) parseFuncParams(node *ast.FuncDecl) (params []map[s...
  method parseFuncResults (line 285) | func (c CGenService) parseFuncResults(node *ast.FuncDecl) (results []map...
  method parseFuncComment (line 317) | func (c CGenService) parseFuncComment(node *ast.FuncDecl) string {

FILE: cmd/gf/internal/cmd/genservice/genservice_ast_utils.go
  method astExprToString (line 24) | func (c CGenService) astExprToString(expr ast.Expr) (string, error) {
  method astCommentToString (line 39) | func (c CGenService) astCommentToString(node *ast.CommentGroup) string {

FILE: cmd/gf/internal/cmd/genservice/genservice_calculate.go
  method calculateImportedItems (line 21) | func (c CGenService) calculateImportedItems(
  method calculateFuncItems (line 52) | func (c CGenService) calculateFuncItems(
  method tidyParam (line 115) | func (c CGenService) tidyParam(paramSlice []map[string]string) (paramStr...
  method tidyResult (line 133) | func (c CGenService) tidyResult(resultSlice []map[string]string) (result...
  method getStructFuncItems (line 147) | func (c CGenService) getStructFuncItems(structName string, allStructItem...
  method calculateStructEmbeddedFuncInfos (line 177) | func (c CGenService) calculateStructEmbeddedFuncInfos(folderInfos []fold...
  function getReceiverName (line 217) | func getReceiverName(receiver string) string {

FILE: cmd/gf/internal/cmd/genservice/genservice_generate.go
  type generateServiceFilesInput (line 23) | type generateServiceFilesInput struct
  method generateServiceFile (line 32) | func (c CGenService) generateServiceFile(in generateServiceFilesInput) (...
  method generateInitializationFile (line 55) | func (c CGenService) generateInitializationFile(in CGenServiceInput, imp...
  method getDstFileNameCase (line 82) | func (c CGenService) getDstFileNameCase(str, caseStr string) (newStr str...

FILE: cmd/gf/internal/cmd/genservice/genservice_generate_template.go
  method generatePackageImports (line 21) | func (c CGenService) generatePackageImports(generatedContent *bytes.Buff...
  method generateType (line 32) | func (c CGenService) generateType(generatedContent *bytes.Buffer, srcStr...
  method generateVar (line 70) | func (c CGenService) generateVar(generatedContent *bytes.Buffer, srcStru...
  method generateFunc (line 94) | func (c CGenService) generateFunc(generatedContent *bytes.Buffer, srcStr...

FILE: cmd/gf/internal/cmd/testdata/build/multiple/multiple.go
  function main (line 3) | func main() {

FILE: cmd/gf/internal/cmd/testdata/build/single/main.go
  function main (line 3) | func main() {

FILE: cmd/gf/internal/cmd/testdata/build/varmap/main.go
  function main (line 9) | func main() {

FILE: cmd/gf/internal/cmd/testdata/fix/fix25_content.go
  function Test_Router_Hook_Multi (line 11) | func Test_Router_Hook_Multi(t *testing.T) {

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/api/article/article_expect.go
  type IArticleV1 (line 14) | type IArticleV1 interface
  type IArticleV2 (line 21) | type IArticleV2 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/api/article/v1/edit.go
  type CreateReq (line 13) | type CreateReq struct
  type CreateRes (line 18) | type CreateRes struct
  type UpdateReq (line 22) | type UpdateReq struct
  type UpdateRes (line 27) | type UpdateRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/api/article/v1/get.go
  type GetListReq (line 11) | type GetListReq struct
  type GetListRes (line 15) | type GetListRes struct
  type GetOneReq (line 19) | type GetOneReq struct
  type GetOneRes (line 23) | type GetOneRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/api/article/v2/edit.go
  type CreateReq (line 11) | type CreateReq struct
  type CreateRes (line 16) | type CreateRes struct
  type UpdateReq (line 18) | type UpdateReq struct
  type UpdateRes (line 23) | type UpdateRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() article.IArticleV1 {
  type ControllerV2 (line 17) | type ControllerV2 struct
  function NewV2 (line 19) | func NewV2() article.IArticleV2 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_create.go
  method Create (line 13) | func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_get_list.go
  method GetList (line 12) | func (c *ControllerV1) GetList(ctx context.Context, req *v1.GetListReq) ...

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_get_one.go
  method GetOne (line 12) | func (c *ControllerV1) GetOne(ctx context.Context, req *v1.GetOneReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_update.go
  method Update (line 12) | func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v2_create.go
  method Create (line 12) | func (c *ControllerV2) Create(ctx context.Context, req *v2.CreateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v2_update.go
  method Update (line 12) | func (c *ControllerV2) Update(ctx context.Context, req *v2.UpdateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/api/dict/dict_expect.go
  type IDictV1 (line 13) | type IDictV1 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/api/dict/v1/dict_type.go
  type DictTypeAddPageReq (line 11) | type DictTypeAddPageReq struct
  type DictTypeAddPageRes (line 15) | type DictTypeAddPageRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/controller/dict/dict_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() dict.IDictV1 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/controller/dict/dict_v1_dict_type.go
  method DictTypeAddPage (line 12) | func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.Dict...

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/api/dict/dict_expect.go
  type IDictV1 (line 13) | type IDictV1 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/api/dict/v1/dict_type.go
  type DictTypeAddPageReq (line 11) | type DictTypeAddPageReq struct
  type DictTypeAddPageRes (line 15) | type DictTypeAddPageRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/controller/dict/dict_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() dict.IDictV1 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/controller/dict/dict_v1_dict_type.go
  method DictTypeAddPage (line 12) | func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.Dict...

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/article/article_expect.go
  type IArticleV1 (line 13) | type IArticleV1 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/article/v1/edit.go
  type CreateReq (line 13) | type CreateReq struct
  type CreateRes (line 18) | type CreateRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/user/user_expect.go
  type IUserV1 (line 13) | type IUserV1 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/user/v1/edit.go
  type CreateReq (line 13) | type CreateReq struct
  type CreateRes (line 18) | type CreateRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/user_expect.go
  type IUserV1 (line 13) | type IUserV1 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/user_ext/user_ext_expect.go
  type IUserExtV1 (line 13) | type IUserExtV1 interface

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/user_ext/v1/edit.go
  type CreateReq (line 13) | type CreateReq struct
  type CreateRes (line 18) | type CreateRes struct
  type UpdateReq (line 22) | type UpdateReq struct
  type UpdateRes (line 27) | type UpdateRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/v1/edit.go
  type CreateReq (line 13) | type CreateReq struct
  type CreateRes (line 18) | type CreateRes struct
  type UpdateReq (line 22) | type UpdateReq struct
  type UpdateRes (line 27) | type UpdateRes struct

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/article/article_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() article.IArticleV1 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/article/article_v1_create.go
  method Create (line 13) | func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/user/user_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() user.IUserV1 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/user/user_v1_create.go
  method Create (line 13) | func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() user_ext.IUserExtV1 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext_v1_create.go
  method Create (line 13) | func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext_v1_update.go
  method Update (line 12) | func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() user.IUserV1 {

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_v1_create.go
  method Create (line 13) | func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_v1_update.go
  method Update (line 12) | func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (r...

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user/dao/internal/table_user.go
  type TableUserDao (line 15) | type TableUserDao struct
    method DB (line 55) | func (dao *TableUserDao) DB() gdb.DB {
    method Table (line 60) | func (dao *TableUserDao) Table() string {
    method Columns (line 65) | func (dao *TableUserDao) Columns() TableUserColumns {
    method Group (line 70) | func (dao *TableUserDao) Group() string {
    method Ctx (line 75) | func (dao *TableUserDao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 89) | func (dao *TableUserDao) Transaction(ctx context.Context, f func(ctx c...
  type TableUserColumns (line 23) | type TableUserColumns struct
  function NewTableUserDao (line 45) | func NewTableUserDao(handlers ...gdb.ModelHandler) *TableUserDao {

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user/dao/table_user.go
  type tableUserDao (line 13) | type tableUserDao struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user/model/do/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user/model/entity/table_user.go
  type TableUser (line 12) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/dao/internal/table_user.go
  type TableUserDao (line 15) | type TableUserDao struct
    method DB (line 55) | func (dao *TableUserDao) DB() gdb.DB {
    method Table (line 60) | func (dao *TableUserDao) Table() string {
    method Columns (line 65) | func (dao *TableUserDao) Columns() TableUserColumns {
    method Group (line 70) | func (dao *TableUserDao) Group() string {
    method Ctx (line 75) | func (dao *TableUserDao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 89) | func (dao *TableUserDao) Transaction(ctx context.Context, f func(ctx c...
  type TableUserColumns (line 23) | type TableUserColumns struct
  function NewTableUserDao (line 45) | func NewTableUserDao(handlers ...gdb.ModelHandler) *TableUserDao {

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/dao/table_user.go
  type tableUserDao (line 13) | type tableUserDao struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/model/do/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/model/entity/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/dao/internal/table_user.go
  type TableUserDao (line 15) | type TableUserDao struct
    method DB (line 53) | func (dao *TableUserDao) DB() gdb.DB {
    method Table (line 58) | func (dao *TableUserDao) Table() string {
    method Columns (line 63) | func (dao *TableUserDao) Columns() TableUserColumns {
    method Group (line 68) | func (dao *TableUserDao) Group() string {
    method Ctx (line 73) | func (dao *TableUserDao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 87) | func (dao *TableUserDao) Transaction(ctx context.Context, f func(ctx c...
  type TableUserColumns (line 23) | type TableUserColumns struct
  function NewTableUserDao (line 43) | func NewTableUserDao(handlers ...gdb.ModelHandler) *TableUserDao {

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/dao/table_user.go
  type tableUserDao (line 13) | type tableUserDao struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/model/do/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/model/entity/table_user.go
  type TableUser (line 12) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_type_mapping/dao/internal/table_user.go
  type TableUserDao (line 15) | type TableUserDao struct
    method DB (line 55) | func (dao *TableUserDao) DB() gdb.DB {
    method Table (line 60) | func (dao *TableUserDao) Table() string {
    method Columns (line 65) | func (dao *TableUserDao) Columns() TableUserColumns {
    method Group (line 70) | func (dao *TableUserDao) Group() string {
    method Ctx (line 75) | func (dao *TableUserDao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 89) | func (dao *TableUserDao) Transaction(ctx context.Context, f func(ctx c...
  type TableUserColumns (line 23) | type TableUserColumns struct
  function NewTableUserDao (line 45) | func NewTableUserDao(handlers ...gdb.ModelHandler) *TableUserDao {

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_type_mapping/dao/table_user.go
  type tableUserDao (line 13) | type tableUserDao struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_type_mapping/model/do/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/generated_user_type_mapping/model/entity/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/gendao/sharding/sharding.sql
  type `single_table` (line 1) | CREATE TABLE `single_table`
  type `users_0001` (line 14) | CREATE TABLE `users_0001`
  type `users_0002` (line 26) | CREATE TABLE `users_0002`
  type `orders_0001` (line 39) | CREATE TABLE `orders_0001`
  type `orders_0002` (line 48) | CREATE TABLE `orders_0002`

FILE: cmd/gf/internal/cmd/testdata/gendao/sharding/sharding_overlapping.sql
  type `a_1` (line 7) | CREATE TABLE `a_1`
  type `a_2` (line 14) | CREATE TABLE `a_2`
  type `a_b_1` (line 21) | CREATE TABLE `a_b_1`
  type `a_b_2` (line 28) | CREATE TABLE `a_b_2`
  type `a_c_1` (line 35) | CREATE TABLE `a_c_1`
  type `a_c_2` (line 42) | CREATE TABLE `a_c_2`

FILE: cmd/gf/internal/cmd/testdata/gendao/sqlite3/user.sqlite3.sql
  type `%s` (line 1) | create table `%s`(

FILE: cmd/gf/internal/cmd/testdata/gendao/tables_pattern.sql
  type trade_order (line 7) | CREATE TABLE trade_order (
  type trade_item (line 12) | CREATE TABLE trade_item (
  type user_info (line 17) | CREATE TABLE user_info (
  type user_log (line 22) | CREATE TABLE user_log (
  type config (line 27) | CREATE TABLE config (

FILE: cmd/gf/internal/cmd/testdata/gendao/user.tpl.sql
  type `%s` (line 1) | CREATE TABLE `%s` (

FILE: cmd/gf/internal/cmd/testdata/genpbentity/user.tpl.sql
  type `%s` (line 1) | CREATE TABLE `%s` (

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/article/article.go
  type sArticle (line 19) | type sArticle struct
    method Get (line 27) | func (s *sArticle) Get(ctx context.Context, id uint) (info struct{}, e...
    method Create (line 36) | func (s *sArticle) Create(ctx context.Context, info struct{}) (id uint...
    method A1o2 (line 42) | func (s *sArticle) A1o2(ctx context.Context, str string, a, b *ast.GoS...
    method B_2 (line 46) | func (s *sArticle) B_2(ctx context.Context, db gdbalias.Raw) (err erro...
  function init (line 22) | func init() {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/article/article_extra.go
  method T1 (line 27) | func (s sArticle) T1(ctx context.Context, id, id2 uint) (gdb gdbas.Model...
  method t2 (line 35) | func (s *sArticle) t2(ctx context.Context) (err error) {
  method T3 (line 53) | func (s *sArticle) T3(ctx context.Context, b *gdbas.Model) (c, d *gdbas....
  method T4 (line 68) | func (s *sArticle) T4(i any) any {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/base/base.go
  type sBase (line 5) | type sBase struct
    method Init (line 10) | func (*sBase) Init() {
    method Destory (line 15) | func (*sBase) Destory() {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/base/base_destory.go
  type baseDestory (line 3) | type baseDestory struct
    method Destory (line 6) | func (baseDestory) Destory() {
    method BeforeDestory (line 11) | func (baseDestory) BeforeDestory() {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/base/sub/sub.go
  type SubBase (line 3) | type SubBase struct
    method Init (line 7) | func (*SubBase) Init() {
    method GetSubBase (line 12) | func (*SubBase) GetSubBase() {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/delivery/delivery_app.go
  type sDeliveryApp (line 15) | type sDeliveryApp struct
    method Create (line 21) | func (s *sDeliveryApp) Create(ctx context.Context) (i service.IDeliver...
    method GetList (line 25) | func (s *sDeliveryApp) GetList(ctx context.Context, i service.IDeliver...
    method GetOne (line 30) | func (s *sDeliveryApp) GetOne(ctx context.Context) (err error) {
    method Delete (line 34) | func (s *sDeliveryApp) Delete(ctx context.Context) (err error) {
    method AA (line 38) | func (s *sDeliveryApp) AA(ctx context.Context) (err error) { return }
  function NewDeliveryApp (line 17) | func NewDeliveryApp() *sDeliveryApp {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/delivery/delivery_cluster.go
  type sDeliveryCluster (line 15) | type sDeliveryCluster struct
    method Create (line 22) | func (s *sDeliveryCluster) Create(ctx context.Context) (err error, gdb...
    method Delete (line 26) | func (s *sDeliveryCluster) Delete(ctx context.Context) (err error) {
    method GetList (line 30) | func (s *sDeliveryCluster) GetList(ctx context.Context) (err error) {
  function NewDeliveryCluster (line 17) | func NewDeliveryCluster() *sDeliveryCluster {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/user/supper_vip_user.go
  function init (line 9) | func init() {
  type sSuperVipUser (line 15) | type sSuperVipUser struct
    method GetVipLevel (line 20) | func (s sSuperVipUser) GetVipLevel(ctx context.Context) (vipLevel int,...
    method SetVipLevel (line 25) | func (s *sSuperVipUser) SetVipLevel(ctx context.Context, id int, vipLe...

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/user/user.go
  function init (line 16) | func init() {
  type sUser (line 20) | type sUser struct
    method Create (line 29) | func (s *sUser) Create(ctx context.Context, name string) (id int, err ...
    method GetOne (line 34) | func (s *sUser) GetOne(ctx context.Context, id int) (name string, err ...
    method GetList (line 39) | func (s *sUser) GetList(ctx context.Context) (names []string, err erro...
    method Update (line 44) | func (s *sUser) Update(ctx context.Context, id int) (name string, err ...
    method Delete (line 49) | func (s *sUser) Delete(ctx context.Context, id int) (err error) {
  function New (line 24) | func New() *sUser {

FILE: cmd/gf/internal/cmd/testdata/genservice/logic/user/vip_user.go
  function init (line 10) | func init() {
  type sVipUser (line 16) | type sVipUser struct
    method Create (line 22) | func (s *sVipUser) Create(ctx context.Context, name string, vipLevel i...
    method GetVipLevel (line 27) | func (s *sVipUser) GetVipLevel() (vipLevel int, err error) {

FILE: cmd/gf/internal/cmd/testdata/genservice/service/article.go
  type IArticle (line 17) | type IArticle interface
  function Article (line 49) | func Article() IArticle {
  function RegisterArticle (line 56) | func RegisterArticle(i IArticle) {

FILE: cmd/gf/internal/cmd/testdata/genservice/service/base.go
  type IBase (line 9) | type IBase interface
  function Base (line 23) | func Base() IBase {
  function RegisterBase (line 30) | func RegisterBase(i IBase) {

FILE: cmd/gf/internal/cmd/testdata/genservice/service/delivery.go
  type IDeliveryApp (line 15) | type IDeliveryApp interface
  type IDeliveryCluster (line 22) | type IDeliveryCluster interface
  function DeliveryApp (line 35) | func DeliveryApp() IDeliveryApp {
  function RegisterDeliveryApp (line 42) | func RegisterDeliveryApp(i IDeliveryApp) {
  function DeliveryCluster (line 46) | func DeliveryCluster() IDeliveryCluster {
  function RegisterDeliveryCluster (line 53) | func RegisterDeliveryCluster(i IDeliveryCluster) {

FILE: cmd/gf/internal/cmd/testdata/genservice/service/user.go
  type ISuperVipUser (line 13) | type ISuperVipUser interface
  type IUser (line 35) | type IUser interface
  type IVipUser (line 47) | type IVipUser interface
  function SuperVipUser (line 75) | func SuperVipUser() ISuperVipUser {
  function RegisterSuperVipUser (line 82) | func RegisterSuperVipUser(i ISuperVipUser) {
  function User (line 86) | func User() IUser {
  function RegisterUser (line 93) | func RegisterUser(i IUser) {
  function VipUser (line 97) | func VipUser() IVipUser {
  function RegisterVipUser (line 104) | func RegisterVipUser(i IVipUser) {

FILE: cmd/gf/internal/cmd/testdata/issue/2572/dao/internal/user_3.go
  type User3Dao (line 15) | type User3Dao struct
    method DB (line 53) | func (dao *User3Dao) DB() gdb.DB {
    method Table (line 58) | func (dao *User3Dao) Table() string {
    method Columns (line 63) | func (dao *User3Dao) Columns() User3Columns {
    method Group (line 68) | func (dao *User3Dao) Group() string {
    method Ctx (line 73) | func (dao *User3Dao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 83) | func (dao *User3Dao) Transaction(ctx context.Context, f func(ctx conte...
  type User3Columns (line 22) | type User3Columns struct
  function NewUser3Dao (line 44) | func NewUser3Dao() *User3Dao {

FILE: cmd/gf/internal/cmd/testdata/issue/2572/dao/internal/user_4.go
  type User4Dao (line 15) | type User4Dao struct
    method DB (line 53) | func (dao *User4Dao) DB() gdb.DB {
    method Table (line 58) | func (dao *User4Dao) Table() string {
    method Columns (line 63) | func (dao *User4Dao) Columns() User4Columns {
    method Group (line 68) | func (dao *User4Dao) Group() string {
    method Ctx (line 73) | func (dao *User4Dao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 83) | func (dao *User4Dao) Transaction(ctx context.Context, f func(ctx conte...
  type User4Columns (line 22) | type User4Columns struct
  function NewUser4Dao (line 44) | func NewUser4Dao() *User4Dao {

FILE: cmd/gf/internal/cmd/testdata/issue/2572/dao/user_3.go
  type user3Dao (line 16) | type user3Dao struct

FILE: cmd/gf/internal/cmd/testdata/issue/2572/dao/user_4.go
  type user4Dao (line 16) | type user4Dao struct

FILE: cmd/gf/internal/cmd/testdata/issue/2572/model/do/user_3.go
  type User1 (line 13) | type User1 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2572/model/do/user_4.go
  type User2 (line 13) | type User2 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2572/model/entity/user_3.go
  type User1 (line 12) | type User1 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2572/model/entity/user_4.go
  type User2 (line 12) | type User2 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2572/sql1.sql
  type `user1` (line 1) | CREATE TABLE `user1` (

FILE: cmd/gf/internal/cmd/testdata/issue/2572/sql2.sql
  type `user2` (line 1) | CREATE TABLE `user2` (

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_1.go
  type User1Dao (line 15) | type User1Dao struct
    method DB (line 53) | func (dao *User1Dao) DB() gdb.DB {
    method Table (line 58) | func (dao *User1Dao) Table() string {
    method Columns (line 63) | func (dao *User1Dao) Columns() User1Columns {
    method Group (line 68) | func (dao *User1Dao) Group() string {
    method Ctx (line 73) | func (dao *User1Dao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 83) | func (dao *User1Dao) Transaction(ctx context.Context, f func(ctx conte...
  type User1Columns (line 22) | type User1Columns struct
  function NewUser1Dao (line 44) | func NewUser1Dao() *User1Dao {

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_2.go
  type User2Dao (line 15) | type User2Dao struct
    method DB (line 53) | func (dao *User2Dao) DB() gdb.DB {
    method Table (line 58) | func (dao *User2Dao) Table() string {
    method Columns (line 63) | func (dao *User2Dao) Columns() User2Columns {
    method Group (line 68) | func (dao *User2Dao) Group() string {
    method Ctx (line 73) | func (dao *User2Dao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 83) | func (dao *User2Dao) Transaction(ctx context.Context, f func(ctx conte...
  type User2Columns (line 22) | type User2Columns struct
  function NewUser2Dao (line 44) | func NewUser2Dao() *User2Dao {

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_3.go
  type User3Dao (line 15) | type User3Dao struct
    method DB (line 53) | func (dao *User3Dao) DB() gdb.DB {
    method Table (line 58) | func (dao *User3Dao) Table() string {
    method Columns (line 63) | func (dao *User3Dao) Columns() User3Columns {
    method Group (line 68) | func (dao *User3Dao) Group() string {
    method Ctx (line 73) | func (dao *User3Dao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 83) | func (dao *User3Dao) Transaction(ctx context.Context, f func(ctx conte...
  type User3Columns (line 22) | type User3Columns struct
  function NewUser3Dao (line 44) | func NewUser3Dao() *User3Dao {

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_4.go
  type User4Dao (line 15) | type User4Dao struct
    method DB (line 53) | func (dao *User4Dao) DB() gdb.DB {
    method Table (line 58) | func (dao *User4Dao) Table() string {
    method Columns (line 63) | func (dao *User4Dao) Columns() User4Columns {
    method Group (line 68) | func (dao *User4Dao) Group() string {
    method Ctx (line 73) | func (dao *User4Dao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 83) | func (dao *User4Dao) Transaction(ctx context.Context, f func(ctx conte...
  type User4Columns (line 22) | type User4Columns struct
  function NewUser4Dao (line 44) | func NewUser4Dao() *User4Dao {

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/user_1.go
  type user1Dao (line 18) | type user1Dao struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/user_2.go
  type user2Dao (line 18) | type user2Dao struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/user_3.go
  type user3Dao (line 16) | type user3Dao struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/dao/user_4.go
  type user4Dao (line 16) | type user4Dao struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_3.go
  type User1 (line 13) | type User1 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_4.go
  type User2 (line 13) | type User2 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_3.go
  type User1 (line 12) | type User1 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_4.go
  type User2 (line 12) | type User2 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2616/sql1.sql
  type `user1` (line 1) | CREATE TABLE `user1` (

FILE: cmd/gf/internal/cmd/testdata/issue/2616/sql2.sql
  type `user2` (line 1) | CREATE TABLE `user2` (

FILE: cmd/gf/internal/cmd/testdata/issue/2746/issue_2746.go
  type Issue2746 (line 12) | type Issue2746 struct

FILE: cmd/gf/internal/cmd/testdata/issue/2746/sql.sql
  type s (line 1) | CREATE TABLE %s (

FILE: cmd/gf/internal/cmd/testdata/issue/3460/api/hello/hello.go
  type IHelloV1 (line 14) | type IHelloV1 interface
  type IHelloV2 (line 21) | type IHelloV2 interface

FILE: cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v1/req.go
  type DictTypeAddPageReq (line 11) | type DictTypeAddPageReq struct
  type DictTypeAddPageRes (line 15) | type DictTypeAddPageRes struct
  type DictTypeAddReq (line 19) | type DictTypeAddReq struct
  type DictTypeAddRes (line 22) | type DictTypeAddRes struct
  type DictTypeEditPageReq (line 25) | type DictTypeEditPageReq struct
  type DictTypeEditPageRes (line 29) | type DictTypeEditPageRes struct
  type DictTypeEditReq (line 33) | type DictTypeEditReq struct
  type DictTypeEditRes (line 36) | type DictTypeEditRes struct

FILE: cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v2/req.go
  type DictTypeAddPageReq (line 11) | type DictTypeAddPageReq struct
  type DictTypeAddPageRes (line 15) | type DictTypeAddPageRes struct
  type DictTypeAddReq (line 19) | type DictTypeAddReq struct
  type DictTypeAddRes (line 22) | type DictTypeAddRes struct
  type DictTypeEditPageReq (line 25) | type DictTypeEditPageReq struct
  type DictTypeEditPageRes (line 29) | type DictTypeEditPageRes struct
  type DictTypeEditReq (line 33) | type DictTypeEditReq struct
  type DictTypeEditRes (line 36) | type DictTypeEditRes struct

FILE: cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_new.go
  type ControllerV1 (line 11) | type ControllerV1 struct
  function NewV1 (line 13) | func NewV1() hello.IHelloV1 {
  type ControllerV2 (line 17) | type ControllerV2 struct
  function NewV2 (line 19) | func NewV2() hello.IHelloV2 {

FILE: cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v1_req.go
  method DictTypeAddPage (line 12) | func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.Dict...
  method DictTypeAdd (line 15) | func (c *ControllerV1) DictTypeAdd(ctx context.Context, req *v1.DictType...
  method DictTypeEditPage (line 18) | func (c *ControllerV1) DictTypeEditPage(ctx context.Context, req *v1.Dic...
  method DictTypeEdit (line 21) | func (c *ControllerV1) DictTypeEdit(ctx context.Context, req *v1.DictTyp...

FILE: cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v2_req.go
  method DictTypeAddPage (line 12) | func (c *ControllerV2) DictTypeAddPage(ctx context.Context, req *v2.Dict...
  method DictTypeAdd (line 15) | func (c *ControllerV2) DictTypeAdd(ctx context.Context, req *v2.DictType...
  method DictTypeEditPage (line 18) | func (c *ControllerV2) DictTypeEditPage(ctx context.Context, req *v2.Dic...
  method DictTypeEdit (line 21) | func (c *ControllerV2) DictTypeEdit(ctx context.Context, req *v2.DictTyp...

FILE: cmd/gf/internal/cmd/testdata/issue/3685/user.tpl.sql
  type `%s` (line 1) | CREATE TABLE `%s` (

FILE: cmd/gf/internal/cmd/testdata/issue/3749/dao/internal/table_user.go
  type TableUserDao (line 15) | type TableUserDao struct
    method DB (line 55) | func (dao *TableUserDao) DB() gdb.DB {
    method Table (line 60) | func (dao *TableUserDao) Table() string {
    method Columns (line 65) | func (dao *TableUserDao) Columns() TableUserColumns {
    method Group (line 70) | func (dao *TableUserDao) Group() string {
    method Ctx (line 75) | func (dao *TableUserDao) Ctx(ctx context.Context) *gdb.Model {
    method Transaction (line 89) | func (dao *TableUserDao) Transaction(ctx context.Context, f func(ctx c...
  type TableUserColumns (line 23) | type TableUserColumns struct
  function NewTableUserDao (line 45) | func NewTableUserDao(handlers ...gdb.ModelHandler) *TableUserDao {

FILE: cmd/gf/internal/cmd/testdata/issue/3749/dao/table_user.go
  type tableUserDao (line 13) | type tableUserDao struct

FILE: cmd/gf/internal/cmd/testdata/issue/3749/model/do/table_user.go
  type TableUser (line 13) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/issue/3749/model/entity/table_user.go
  type TableUser (line 12) | type TableUser struct

FILE: cmd/gf/internal/cmd/testdata/issue/3749/user.tpl.sql
  type `%s` (line 1) | CREATE TABLE `%s` (

FILE: cmd/gf/internal/cmd/testdata/issue/3835/logic/issue3835/issue3835.go
  function init (line 11) | func init() {
  type sItest (line 15) | type sItest struct
    method F (line 22) | func (s *sItest) F(ctx context.Context) (d mysql.Driver, err error) {
  function New (line 18) | func New() *sItest {

FILE: cmd/gf/internal/cmd/testdata/issue/3835/service/issue_3835.go
  type IItest (line 15) | type IItest interface
  function Itest (line 24) | func Itest() IItest {
  function RegisterItest (line 31) | func RegisterItest(i IItest) {

FILE: cmd/gf/internal/cmd/testdata/issue/4242/logic/issue4242/issue4242.go
  function init (line 14) | func init() {
  type sIssue4242 (line 18) | type sIssue4242 struct
    method GetDriver (line 26) | func (s *sIssue4242) GetDriver(ctx context.Context) (d mysql.Driver, e...
    method GetRequest (line 31) | func (s *sIssue4242) GetRequest(ctx context.Context) (*ghttp.Request, ...
  function New (line 21) | func New() *sIssue4242 {

FILE: cmd/gf/internal/cmd/testdata/issue/4242/logic/issue4242alias/issue4242alias.go
  function init (line 18) | func init() {
  type sIssue4242Alias (line 22) | type sIssue4242Alias struct
    method GetDriver (line 30) | func (s *sIssue4242Alias) GetDriver(ctx context.Context) (d mysqlDrive...
    method GetRequest (line 35) | func (s *sIssue4242Alias) GetRequest(ctx context.Context) (*ghttp.Requ...
  function New (line 25) | func New() *sIssue4242Alias {

FILE: cmd/gf/internal/cmd/testdata/issue/4242/service/issue_4242.go
  type IIssue4242 (line 16) | type IIssue4242 interface
  function Issue4242 (line 28) | func Issue4242() IIssue4242 {
  function RegisterIssue4242 (line 35) | func RegisterIssue4242(i IIssue4242) {

FILE: cmd/gf/internal/cmd/testdata/issue/4242/service/issue_4242_alias.go
  type IIssue4242Alias (line 16) | type IIssue4242Alias interface
  function Issue4242Alias (line 28) | func Issue4242Alias() IIssue4242Alias {
  function RegisterIssue4242Alias (line 35) | func RegisterIssue4242Alias(i IIssue4242Alias) {

FILE: cmd/gf/internal/cmd/testdata/issue/4387/api/types.go
  type Status (line 10) | type Status
  constant StatusPending (line 13) | StatusPending Status = iota
  constant StatusActive (line 14) | StatusActive
  constant StatusDone (line 15) | StatusDone

FILE: cmd/gf/internal/consts/consts.go
  constant DoNotEditKey (line 12) | DoNotEditKey = `DO NOT EDIT`

FILE: cmd/gf/internal/consts/consts_gen_ctrl_template.go
  constant TemplateGenCtrlControllerEmpty (line 9) | TemplateGenCtrlControllerEmpty = `
  constant TemplateGenCtrlControllerNewEmpty (line 17) | TemplateGenCtrlControllerNewEmpty = `
  constant TemplateGenCtrlControllerNewFunc (line 29) | TemplateGenCtrlControllerNewFunc = `
  constant TemplateGenCtrlControllerMethodFunc (line 37) | TemplateGenCtrlControllerMethodFunc = `
  constant TemplateGenCtrlControllerHeader (line 54) | TemplateGenCtrlControllerHeader = `
  constant TemplateGenCtrlControllerMethodFuncMerge (line 68) | TemplateGenCtrlControllerMethodFuncMerge = `
  constant TemplateGenCtrlApiInterface (line 75) | TemplateGenCtrlApiInterface = `

FILE: cmd/gf/internal/consts/consts_gen_ctrl_template_sdk.go
  constant TemplateGenCtrlSdkPkgNew (line 9) | TemplateGenCtrlSdkPkgNew = `
  constant TemplateGenCtrlSdkIClient (line 36) | TemplateGenCtrlSdkIClient = `
  constant TemplateGenCtrlSdkImplementer (line 50) | TemplateGenCtrlSdkImplementer = `
  constant TemplateGenCtrlSdkImplementerNew (line 72) | TemplateGenCtrlSdkImplementerNew = `
  constant TemplateGenCtrlSdkImplementerFunc (line 84) | TemplateGenCtrlSdkImplementerFunc = `{MethodComment}

FILE: cmd/gf/internal/consts/consts_gen_dao_template_dao.go
  constant TemplateGenDaoIndexContent (line 9) | TemplateGenDaoIndexContent = `
  constant TemplateGenDaoInternalContent (line 59) | TemplateGenDaoInternalContent = `

FILE: cmd/gf/internal/consts/consts_gen_dao_template_do.go
  constant TemplateGenDaoDoContent (line 9) | TemplateGenDaoDoContent = `

FILE: cmd/gf/internal/consts/consts_gen_dao_template_entity.go
  constant TemplateGenDaoEntityContent (line 9) | TemplateGenDaoEntityContent = `

FILE: cmd/gf/internal/consts/consts_gen_dao_template_table.go
  constant TemplateGenTableContent (line 9) | TemplateGenTableContent = `

FILE: cmd/gf/internal/consts/consts_gen_enums_template.go
  constant TemplateGenEnums (line 9) | TemplateGenEnums = `

FILE: cmd/gf/internal/consts/consts_gen_pbentity_template.go
  constant TemplatePbEntityMessageContent (line 9) | TemplatePbEntityMessageContent = `

FILE: cmd/gf/internal/consts/consts_gen_service_template.go
  constant TemplateGenServiceContentHead (line 9) | TemplateGenServiceContentHead = `
  constant TemplateGenServiceContentInterface (line 20) | TemplateGenServiceContentInterface = `
  constant TemplateGenServiceContentVariable (line 26) | TemplateGenServiceContentVariable = `
  constant TemplateGenServiceContentRegister (line 30) | TemplateGenServiceContentRegister = `

FILE: cmd/gf/internal/consts/consts_gen_service_template_logic.go
  constant TemplateGenServiceLogicContent (line 9) | TemplateGenServiceLogicContent = `

FILE: cmd/gf/internal/packed/template-mono-app.go
  function init (line 5) | func init() {

FILE: cmd/gf/internal/packed/template-mono.go
  function init (line 5) | func init() {

FILE: cmd/gf/internal/packed/template-single.go
  function init (line 5) | func init() {

FILE: cmd/gf/internal/service/install.go
  type serviceInstall (line 31) | type serviceInstall struct
    method Run (line 41) | func (s serviceInstall) Run(ctx context.Context) (err error) {
    method IsInstalled (line 143) | func (s serviceInstall) IsInstalled() (*serviceInstallAvailablePath, b...
    method getGoPathBin (line 154) | func (s serviceInstall) getGoPathBin() string {
    method getAvailablePaths (line 162) | func (s serviceInstall) getAvailablePaths() []serviceInstallAvailableP...
    method checkAndAppendToAvailablePath (line 227) | func (s serviceInstall) checkAndAppendToAvailablePath(folderPaths []se...
  type serviceInstallAvailablePath (line 33) | type serviceInstallAvailablePath struct

FILE: cmd/gf/internal/utility/allyes/allyes.go
  constant EnvName (line 15) | EnvName = "GF_CLI_ALL_YES"
  function Init (line 19) | func Init() {
  function Check (line 26) | func Check() bool {

FILE: cmd/gf/internal/utility/mlog/mlog.go
  constant headerPrintEnvName (line 18) | headerPrintEnvName = "GF_CLI_MLOG_HEADER"
  function init (line 26) | func init() {
  function SetHeaderPrint (line 45) | func SetHeaderPrint(enabled bool) {
  function Print (line 54) | func Print(v ...any) {
  function Printf (line 58) | func Printf(format string, v ...any) {
  function Fatal (line 62) | func Fatal(v ...any) {
  function Fatalf (line 66) | func Fatalf(format string, v ...any) {
  function Debug (line 70) | func Debug(v ...any) {
  function Debugf (line 74) | func Debugf(format string, v ...any) {

FILE: cmd/gf/internal/utility/utils/utils.go
  function GoFmt (line 25) | func GoFmt(path string) {
  function GoModTidy (line 52) | func GoModTidy(ctx context.Context, dirPath string) error {
  function IsFileDoNotEdit (line 59) | func IsFileDoNotEdit(filePath string) bool {
  function ReplaceGeneratedContentGFV2 (line 67) | func ReplaceGeneratedContentGFV2(folderPath string) (err error) {
  function GetImportPath (line 81) | func GetImportPath(dirPath string) string {
  function GetModPath (line 116) | func GetModPath() string {

FILE: cmd/gf/internal/utility/utils/utils_http_download.go
  function HTTPDownloadFileWithPercent (line 23) | func HTTPDownloadFileWithPercent(url string, localSaveFilePath string) e...

FILE: cmd/gf/internal/utility/utils/utils_test.go
  function Test_GetModPath (line 18) | func Test_GetModPath(t *testing.T) {

FILE: cmd/gf/main.go
  function main (line 19) | func main() {

FILE: container/garray/garray_func.go
  function defaultComparatorInt (line 15) | func defaultComparatorInt(a, b int) int {
  function defaultComparatorStr (line 26) | func defaultComparatorStr(a, b string) int {
  function defaultSorter (line 32) | func defaultSorter[T comparable](values []T, comparator func(a T, b T) i...
  function quickSortInt (line 39) | func quickSortInt(values []int, comparator func(a, b int) int) {
  function quickSortStr (line 61) | func quickSortStr(values []string, comparator func(a, b string) int) {
  function tToAnySlice (line 83) | func tToAnySlice[T any](values []T) []any {
  function anyToTSlice (line 95) | func anyToTSlice[T any](values []any) []T {
  function tToAnySlices (line 107) | func tToAnySlices[T any](values [][]T) [][]any {
  function anyToTSlices (line 119) | func anyToTSlices[T any](values [][]any) [][]T {

FILE: container/garray/garray_normal_any.go
  type Array (line 19) | type Array struct
    method lazyInit (line 91) | func (a *Array) lazyInit() {
    method At (line 101) | func (a *Array) At(index int) (value any) {
    method Get (line 108) | func (a *Array) Get(index int) (value any, found bool) {
    method Set (line 114) | func (a *Array) Set(index int, value any) error {
    method SetArray (line 120) | func (a *Array) SetArray(array []any) *Array {
    method Replace (line 127) | func (a *Array) Replace(array []any) *Array {
    method Sum (line 134) | func (a *Array) Sum() (sum int) {
    method SortFunc (line 140) | func (a *Array) SortFunc(less func(v1, v2 any) bool) *Array {
    method InsertBefore (line 147) | func (a *Array) InsertBefore(index int, values ...any) error {
    method InsertAfter (line 153) | func (a *Array) InsertAfter(index int, values ...any) error {
    method Remove (line 160) | func (a *Array) Remove(index int) (value any, found bool) {
    method RemoveValue (line 167) | func (a *Array) RemoveValue(value any) bool {
    method RemoveValues (line 173) | func (a *Array) RemoveValues(values ...any) {
    method PushLeft (line 179) | func (a *Array) PushLeft(value ...any) *Array {
    method PushRight (line 187) | func (a *Array) PushRight(value ...any) *Array {
    method PopRand (line 195) | func (a *Array) PopRand() (value any, found bool) {
    method PopRands (line 201) | func (a *Array) PopRands(size int) []any {
    method PopLeft (line 208) | func (a *Array) PopLeft() (value any, found bool) {
    method PopRight (line 215) | func (a *Array) PopRight() (value any, found bool) {
    method PopLefts (line 221) | func (a *Array) PopLefts(size int) []any {
    method PopRights (line 227) | func (a *Array) PopRights(size int) []any {
    method Range (line 239) | func (a *Array) Range(start int, end ...int) []any {
    method SubSlice (line 257) | func (a *Array) SubSlice(offset int, length ...int) []any {
    method Append (line 263) | func (a *Array) Append(value ...any) *Array {
    method Len (line 270) | func (a *Array) Len() int {
    method Slice (line 278) | func (a *Array) Slice() []any {
    method Interfaces (line 284) | func (a *Array) Interfaces() []any {
    method Clone (line 289) | func (a *Array) Clone() (newArray *Array) {
    method Clear (line 295) | func (a *Array) Clear() *Array {
    method Contains (line 302) | func (a *Array) Contains(value any) bool {
    method Search (line 309) | func (a *Array) Search(value any) int {
    method Unique (line 316) | func (a *Array) Unique() *Array {
    method LockFunc (line 323) | func (a *Array) LockFunc(f func(array []any)) *Array {
    method RLockFunc (line 330) | func (a *Array) RLockFunc(f func(array []any)) *Array {
    method Merge (line 340) | func (a *Array) Merge(array any) *Array {
    method Fill (line 347) | func (a *Array) Fill(startIndex int, num int, value any) error {
    method Chunk (line 355) | func (a *Array) Chunk(size int) [][]any {
    method Pad (line 364) | func (a *Array) Pad(size int, val any) *Array {
    method Rand (line 371) | func (a *Array) Rand() (value any, found bool) {
    method Rands (line 377) | func (a *Array) Rands(size int) []any {
    method Shuffle (line 383) | func (a *Array) Shuffle() *Array {
    method Reverse (line 390) | func (a *Array) Reverse() *Array {
    method Join (line 397) | func (a *Array) Join(glue string) string {
    method CountValues (line 403) | func (a *Array) CountValues() map[any]int {
    method Iterator (line 409) | func (a *Array) Iterator(f func(k int, v any) bool) {
    method IteratorAsc (line 415) | func (a *Array) IteratorAsc(f func(k int, v any) bool) {
    method IteratorDesc (line 422) | func (a *Array) IteratorDesc(f func(k int, v any) bool) {
    method String (line 428) | func (a *Array) String() string {
    method MarshalJSON (line 438) | func (a Array) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 444) | func (a *Array) UnmarshalJSON(b []byte) error {
    method UnmarshalValue (line 450) | func (a *Array) UnmarshalValue(value any) error {
    method Filter (line 458) | func (a *Array) Filter(filter func(index int, value any) bool) *Array {
    method FilterNil (line 465) | func (a *Array) FilterNil() *Array {
    method FilterEmpty (line 473) | func (a *Array) FilterEmpty() *Array {
    method Walk (line 480) | func (a *Array) Walk(f func(value any) any) *Array {
    method IsEmpty (line 487) | func (a *Array) IsEmpty() bool {
    method DeepCopy (line 493) | func (a *Array) DeepCopy() any {
  function New (line 27) | func New(safe ...bool) *Array {
  function NewArray (line 32) | func NewArray(safe ...bool) *Array {
  function NewArraySize (line 39) | func NewArraySize(size int, cap int, safe ...bool) *Array {
  function NewArrayRange (line 47) | func NewArrayRange(start, end, step int, safe ...bool) *Array {
  function NewFrom (line 62) | func NewFrom(array []any, safe ...bool) *Array {
  function NewFromCopy (line 68) | func NewFromCopy(array []any, safe ...bool) *Array {
  function NewArrayFrom (line 75) | func NewArrayFrom(array []any, safe ...bool) *Array {
  function NewArrayFromCopy (line 84) | func NewArrayFromCopy(array []any, safe ...bool) *Array {

FILE: container/garray/garray_normal_int.go
  type IntArray (line 20) | type IntArray struct
    method lazyInit (line 75) | func (a *IntArray) lazyInit() {
    method At (line 85) | func (a *IntArray) At(index int) (value int) {
    method Get (line 92) | func (a *IntArray) Get(index int) (value int, found bool) {
    method Set (line 98) | func (a *IntArray) Set(index int, value int) error {
    method SetArray (line 104) | func (a *IntArray) SetArray(array []int) *IntArray {
    method Replace (line 111) | func (a *IntArray) Replace(array []int) *IntArray {
    method Sum (line 118) | func (a *IntArray) Sum() (sum int) {
    method Sort (line 125) | func (a *IntArray) Sort(reverse ...bool) *IntArray {
    method SortFunc (line 142) | func (a *IntArray) SortFunc(less func(v1, v2 int) bool) *IntArray {
    method InsertBefore (line 149) | func (a *IntArray) InsertBefore(index int, values ...int) error {
    method InsertAfter (line 155) | func (a *IntArray) InsertAfter(index int, values ...int) error {
    method Remove (line 162) | func (a *IntArray) Remove(index int) (value int, found bool) {
    method RemoveValue (line 169) | func (a *IntArray) RemoveValue(value int) bool {
    method RemoveValues (line 175) | func (a *IntArray) RemoveValues(values ...int) {
    method PushLeft (line 181) | func (a *IntArray) PushLeft(value ...int) *IntArray {
    method PushRight (line 189) | func (a *IntArray) PushRight(value ...int) *IntArray {
    method PopLeft (line 197) | func (a *IntArray) PopLeft() (value int, found bool) {
    method PopRight (line 204) | func (a *IntArray) PopRight() (value int, found bool) {
    method PopRand (line 211) | func (a *IntArray) PopRand() (value int, found bool) {
    method PopRands (line 219) | func (a *IntArray) PopRands(size int) []int {
    method PopLefts (line 227) | func (a *IntArray) PopLefts(size int) []int {
    method PopRights (line 235) | func (a *IntArray) PopRights(size int) []int {
    method Range (line 247) | func (a *IntArray) Range(start int, end ...int) []int {
    method SubSlice (line 265) | func (a *IntArray) SubSlice(offset int, length ...int) []int {
    method Append (line 271) | func (a *IntArray) Append(value ...int) *IntArray {
    method Len (line 278) | func (a *IntArray) Len() int {
    method Slice (line 286) | func (a *IntArray) Slice() []int {
    method Interfaces (line 292) | func (a *IntArray) Interfaces() []any {
    method Clone (line 298) | func (a *IntArray) Clone() (newArray *IntArray) {
    method Clear (line 306) | func (a *IntArray) Clear() *IntArray {
    method Contains (line 313) | func (a *IntArray) Contains(value int) bool {
    method Search (line 320) | func (a *IntArray) Search(value int) int {
    method Unique (line 327) | func (a *IntArray) Unique() *IntArray {
    method LockFunc (line 334) | func (a *IntArray) LockFunc(f func(array []int)) *IntArray {
    method RLockFunc (line 341) | func (a *IntArray) RLockFunc(f func(array []int)) *IntArray {
    method Merge (line 351) | func (a *IntArray) Merge(array any) *IntArray {
    method Fill (line 357) | func (a *IntArray) Fill(startIndex int, num int, value int) error {
    method Chunk (line 365) | func (a *IntArray) Chunk(size int) [][]int {
    method Pad (line 374) | func (a *IntArray) Pad(size int, value int) *IntArray {
    method Rand (line 381) | func (a *IntArray) Rand() (value int, found bool) {
    method Rands (line 387) | func (a *IntArray) Rands(size int) []int {
    method Shuffle (line 393) | func (a *IntArray) Shuffle() *IntArray {
    method Reverse (line 400) | func (a *IntArray) Reverse() *IntArray {
    method Join (line 407) | func (a *IntArray) Join(glue string) string {
    method CountValues (line 413) | func (a *IntArray) CountValues() map[int]int {
    method Iterator (line 419) | func (a *IntArray) Iterator(f func(k int, v int) bool) {
    method IteratorAsc (line 425) | func (a *IntArray) IteratorAsc(f func(k int, v int) bool) {
    method IteratorDesc (line 432) | func (a *IntArray) IteratorDesc(f func(k int, v int) bool) {
    method String (line 438) | func (a *IntArray) String() string {
    method MarshalJSON (line 447) | func (a IntArray) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 453) | func (a *IntArray) UnmarshalJSON(b []byte) error {
    method UnmarshalValue (line 459) | func (a *IntArray) UnmarshalValue(value any) error {
    method Filter (line 467) | func (a *IntArray) Filter(filter func(index int, value int) bool) *Int...
    method FilterEmpty (line 474) | func (a *IntArray) FilterEmpty() *IntArray {
    method Walk (line 481) | func (a *IntArray) Walk(f func(value int) int) *IntArray {
    method IsEmpty (line 488) | func (a *IntArray) IsEmpty() bool {
    method DeepCopy (line 494) | func (a *IntArray) DeepCopy() any {
  function NewIntArray (line 28) | func NewIntArray(safe ...bool) *IntArray {
  function NewIntArraySize (line 35) | func NewIntArraySize(size int, cap int, safe ...bool) *IntArray {
  function NewIntArrayRange (line 43) | func NewIntArrayRange(start, end, step int, safe ...bool) *IntArray {
  function NewIntArrayFrom (line 59) | func NewIntArrayFrom(array []int, safe ...bool) *IntArray {
  function NewIntArrayFromCopy (line 68) | func NewIntArrayFromCopy(array []int, safe ...bool) *IntArray {

FILE: container/garray/garray_normal_str.go
  type StrArray (line 22) | type StrArray struct
    method lazyInit (line 62) | func (a *StrArray) lazyInit() {
    method At (line 72) | func (a *StrArray) At(index int) (value string) {
    method Get (line 79) | func (a *StrArray) Get(index int) (value string, found bool) {
    method Set (line 85) | func (a *StrArray) Set(index int, value string) error {
    method SetArray (line 91) | func (a *StrArray) SetArray(array []string) *StrArray {
    method Replace (line 98) | func (a *StrArray) Replace(array []string) *StrArray {
    method Sum (line 105) | func (a *StrArray) Sum() (sum int) {
    method Sort (line 113) | func (a *StrArray) Sort(reverse ...bool) *StrArray {
    method SortFunc (line 129) | func (a *StrArray) SortFunc(less func(v1, v2 string) bool) *StrArray {
    method InsertBefore (line 136) | func (a *StrArray) InsertBefore(index int, values ...string) error {
    method InsertAfter (line 142) | func (a *StrArray) InsertAfter(index int, values ...string) error {
    method Remove (line 149) | func (a *StrArray) Remove(index int) (value string, found bool) {
    method RemoveValue (line 156) | func (a *StrArray) RemoveValue(value string) bool {
    method RemoveValues (line 162) | func (a *StrArray) RemoveValues(values ...string) {
    method PushLeft (line 168) | func (a *StrArray) PushLeft(value ...string) *StrArray {
    method PushRight (line 176) | func (a *StrArray) PushRight(value ...string) *StrArray {
    method PopLeft (line 184) | func (a *StrArray) PopLeft() (value string, found bool) {
    method PopRight (line 191) | func (a *StrArray) PopRight() (value string, found bool) {
    method PopRand (line 198) | func (a *StrArray) PopRand() (value string, found bool) {
    method PopRands (line 206) | func (a *StrArray) PopRands(size int) []string {
    method PopLefts (line 214) | func (a *StrArray) PopLefts(size int) []string {
    method PopRights (line 222) | func (a *StrArray) PopRights(size int) []string {
    method Range (line 234) | func (a *StrArray) Range(start int, end ...int) []string {
    method SubSlice (line 252) | func (a *StrArray) SubSlice(offset int, length ...int) []string {
    method Append (line 258) | func (a *StrArray) Append(value ...string) *StrArray {
    method Len (line 265) | func (a *StrArray) Len() int {
    method Slice (line 273) | func (a *StrArray) Slice() []string {
    method Interfaces (line 279) | func (a *StrArray) Interfaces() []any {
    method Clone (line 285) | func (a *StrArray) Clone() (newArray *StrArray) {
    method Clear (line 293) | func (a *StrArray) Clear() *StrArray {
    method Contains (line 300) | func (a *StrArray) Contains(value string) bool {
    method ContainsI (line 307) | func (a *StrArray) ContainsI(value string) bool {
    method Search (line 325) | func (a *StrArray) Search(value string) int {
    method Unique (line 332) | func (a *StrArray) Unique() *StrArray {
    method LockFunc (line 339) | func (a *StrArray) LockFunc(f func(array []string)) *StrArray {
    method RLockFunc (line 346) | func (a *StrArray) RLockFunc(f func(array []string)) *StrArray {
    method Merge (line 356) | func (a *StrArray) Merge(array any) *StrArray {
    method Fill (line 362) | func (a *StrArray) Fill(startIndex int, num int, value string) error {
    method Chunk (line 370) | func (a *StrArray) Chunk(size int) [][]string {
    method Pad (line 379) | func (a *StrArray) Pad(size int, value string) *StrArray {
    method Rand (line 386) | func (a *StrArray) Rand() (value string, found bool) {
    method Rands (line 392) | func (a *StrArray) Rands(size int) []string {
    method Shuffle (line 398) | func (a *StrArray) Shuffle() *StrArray {
    method Reverse (line 405) | func (a *StrArray) Reverse() *StrArray {
    method Join (line 412) | func (a *StrArray) Join(glue string) string {
    method CountValues (line 418) | func (a *StrArray) CountValues() map[string]int {
    method Iterator (line 424) | func (a *StrArray) Iterator(f func(k int, v string) bool) {
    method IteratorAsc (line 430) | func (a *StrArray) IteratorAsc(f func(k int, v string) bool) {
    method IteratorDesc (line 437) | func (a *StrArray) IteratorDesc(f func(k int, v string) bool) {
    method String (line 443) | func (a *StrArray) String() string {
    method MarshalJSON (line 466) | func (a StrArray) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 472) | func (a *StrArray) UnmarshalJSON(b []byte) error {
    method UnmarshalValue (line 478) | func (a *StrArray) UnmarshalValue(value any) error {
    method Filter (line 486) | func (a *StrArray) Filter(filter func(index int, value string) bool) *...
    method FilterEmpty (line 493) | func (a *StrArray) FilterEmpty() *StrArray {
    method Walk (line 500) | func (a *StrArray) Walk(f func(value string) string) *StrArray {
    method IsEmpty (line 507) | func (a *StrArray) IsEmpty() bool {
    method DeepCopy (line 513) | func (a *StrArray) DeepCopy() any {
  function NewStrArray (line 30) | func NewStrArray(safe ...bool) *StrArray {
  function NewStrArraySize (line 37) | func NewStrArraySize(size int, cap int, safe ...bool) *StrArray {
  function NewStrArrayFrom (line 46) | func NewStrArrayFrom(array []string, safe ...bool) *StrArray {
  function NewStrArrayFromCopy (line 55) | func NewStrArrayFromCopy(array []string, safe ...bool) *StrArray {

FILE: container/garray/garray_normal_t.go
  type TArray (line 28) | type TArray struct
  function NewTArray (line 36) | func NewTArray[T comparable](safe ...bool) *TArray[T] {
  function NewTArraySize (line 43) | func NewTArraySize[T comparable](size int, cap int, safe ...bool) *TArra...
  function NewTArrayFrom (line 53) | func NewTArrayFrom[T comparable](array []T, safe ...bool) *TArray[T] {
  function NewTArrayFromCopy (line 63) | func NewTArrayFromCopy[T comparable](array []T, safe ...bool) *TArray[T] {
  method At (line 74) | func (a *TArray[T]) At(index int) (value T) {
  method Get (line 81) | func (a *TArray[T]) Get(index int) (value T, found bool) {
  method Set (line 92) | func (a *TArray[T]) Set(index int, value T) error {
  method SetArray (line 103) | func (a *TArray[T]) SetArray(array []T) *TArray[T] {
  method Replace (line 111) | func (a *TArray[T]) Replace(array []T) *TArray[T] {
  method Sum (line 125) | func (a *TArray[T]) Sum() (sum int) {
  method SortFunc (line 135) | func (a *TArray[T]) SortFunc(less func(v1, v2 T) bool) *TArray[T] {
  method InsertBefore (line 145) | func (a *TArray[T]) InsertBefore(index int, values ...T) error {
  method InsertAfter (line 158) | func (a *TArray[T]) InsertAfter(index int, values ...T) error {
  method Remove (line 172) | func (a *TArray[T]) Remove(index int) (value T, found bool) {
  method doRemoveWithoutLock (line 179) | func (a *TArray[T]) doRemoveWithoutLock(index int) (value T, found bool) {
  method RemoveValue (line 204) | func (a *TArray[T]) RemoveValue(value T) bool {
  method RemoveValues (line 215) | func (a *TArray[T]) RemoveValues(values ...T) {
  method PushLeft (line 226) | func (a *TArray[T]) PushLeft(value ...T) *TArray[T] {
  method PushRight (line 235) | func (a *TArray[T]) PushRight(value ...T) *TArray[T] {
  method PopRand (line 244) | func (a *TArray[T]) PopRand() (value T, found bool) {
  method PopRands (line 251) | func (a *TArray[T]) PopRands(size int) []T {
  method PopLeft (line 269) | func (a *TArray[T]) PopLeft() (value T, found bool) {
  method PopRight (line 283) | func (a *TArray[T]) PopRight() (value T, found bool) {
  method PopLefts (line 297) | func (a *TArray[T]) PopLefts(size int) []T {
  method PopRights (line 314) | func (a *TArray[T]) PopRights(size int) []T {
  method Range (line 338) | func (a *TArray[T]) Range(start int, end ...int) []T {
  method SubSlice (line 374) | func (a *TArray[T]) SubSlice(offset int, length ...int) []T {
  method Append (line 412) | func (a *TArray[T]) Append(value ...T) *TArray[T] {
  method Len (line 418) | func (a *TArray[T]) Len() int {
  method Slice (line 428) | func (a *TArray[T]) Slice() []T {
  method Interfaces (line 441) | func (a *TArray[T]) Interfaces() []any {
  method Clone (line 446) | func (a *TArray[T]) Clone() (newArray *TArray[T]) {
  method Clear (line 455) | func (a *TArray[T]) Clear() *TArray[T] {
  method Contains (line 465) | func (a *TArray[T]) Contains(value T) bool {
  method Search (line 471) | func (a *TArray[T]) Search(value T) int {
  method doSearchWithoutLock (line 477) | func (a *TArray[T]) doSearchWithoutLock(value T) int {
  method Unique (line 493) | func (a *TArray[T]) Unique() *TArray[T] {
  method LockFunc (line 518) | func (a *TArray[T]) LockFunc(f func(array []T)) *TArray[T] {
  method RLockFunc (line 526) | func (a *TArray[T]) RLockFunc(f func(array []T)) *TArray[T] {
  method Merge (line 537) | func (a *TArray[T]) Merge(array any) *TArray[T] {
  method Fill (line 558) | func (a *TArray[T]) Fill(startIndex int, num int, value T) error {
  method Chunk (line 577) | func (a *TArray[T]) Chunk(size int) [][]T {
  method Pad (line 601) | func (a *TArray[T]) Pad(size int, val T) *TArray[T] {
  method Rand (line 625) | func (a *TArray[T]) Rand() (value T, found bool) {
  method Rands (line 636) | func (a *TArray[T]) Rands(size int) []T {
  method Shuffle (line 650) | func (a *TArray[T]) Shuffle() *TArray[T] {
  method Reverse (line 660) | func (a *TArray[T]) Reverse() *TArray[T] {
  method Join (line 670) | func (a *TArray[T]) Join(glue string) string {
  method CountValues (line 687) | func (a *TArray[T]) CountValues() map[T]int {
  method Iterator (line 698) | func (a *TArray[T]) Iterator(f func(k int, v T) bool) {
  method IteratorAsc (line 704) | func (a *TArray[T]) IteratorAsc(f func(k int, v T) bool) {
  method IteratorDesc (line 716) | func (a *TArray[T]) IteratorDesc(f func(k int, v T) bool) {
  method String (line 727) | func (a *TArray[T]) String() string {
  method MarshalJSON (line 755) | func (a TArray[T]) MarshalJSON() ([]byte, error) {
  method UnmarshalJSON (line 762) | func (a *TArray[T]) UnmarshalJSON(b []byte) error {
  method UnmarshalValue (line 775) | func (a *TArray[T]) UnmarshalValue(value any) error {
  method Filter (line 792) | func (a *TArray[T]) Filter(filter func(index int, value T) bool) *TArray...
  method FilterNil (line 806) | func (a *TArray[T]) FilterNil() *TArray[T] {
  method FilterEmpty (line 821) | func (a *TArray[T]) FilterEmpty() *TArray[T] {
  method Walk (line 835) | func (a *TArray[T]) Walk(f func(value T) T) *TArray[T] {
  method IsEmpty (line 845) | func (a *TArray[T]) IsEmpty() bool {
  method DeepCopy (line 850) | func (a *TArray[T]) DeepCopy() any {

FILE: container/garray/garray_sorted_any.go
  type SortedArray (line 22) | type SortedArray struct
    method lazyInit (line 28) | func (a *SortedArray) lazyInit() {
    method At (line 93) | func (a *SortedArray) At(index int) (value any) {
    method SetArray (line 99) | func (a *SortedArray) SetArray(array []any) *SortedArray {
    method SetComparator (line 107) | func (a *SortedArray) SetComparator(comparator func(a, b any) int) {
    method Sort (line 115) | func (a *SortedArray) Sort() *SortedArray {
    method Add (line 123) | func (a *SortedArray) Add(values ...any) *SortedArray {
    method Append (line 130) | func (a *SortedArray) Append(values ...any) *SortedArray {
    method Get (line 137) | func (a *SortedArray) Get(index int) (value any, found bool) {
    method Remove (line 144) | func (a *SortedArray) Remove(index int) (value any, found bool) {
    method RemoveValue (line 151) | func (a *SortedArray) RemoveValue(value any) bool {
    method RemoveValues (line 157) | func (a *SortedArray) RemoveValues(values ...any) {
    method PopLeft (line 164) | func (a *SortedArray) PopLeft() (value any, found bool) {
    method PopRight (line 171) | func (a *SortedArray) PopRight() (value any, found bool) {
    method PopRand (line 178) | func (a *SortedArray) PopRand() (value any, found bool) {
    method PopRands (line 184) | func (a *SortedArray) PopRands(size int) []any {
    method PopLefts (line 190) | func (a *SortedArray) PopLefts(size int) []any {
    method PopRights (line 196) | func (a *SortedArray) PopRights(size int) []any {
    method Range (line 208) | func (a *SortedArray) Range(start int, end ...int) []any {
    method SubSlice (line 225) | func (a *SortedArray) SubSlice(offset int, length ...int) []any {
    method Sum (line 231) | func (a *SortedArray) Sum() (sum int) {
    method Len (line 237) | func (a *SortedArray) Len() int {
    method Slice (line 245) | func (a *SortedArray) Slice() []any {
    method Interfaces (line 251) | func (a *SortedArray) Interfaces() []any {
    method Contains (line 257) | func (a *SortedArray) Contains(value any) bool {
    method Search (line 264) | func (a *SortedArray) Search(value any) (index int) {
    method SetUnique (line 272) | func (a *SortedArray) SetUnique(unique bool) *SortedArray {
    method Unique (line 279) | func (a *SortedArray) Unique() *SortedArray {
    method Clone (line 286) | func (a *SortedArray) Clone() (newArray *SortedArray) {
    method Clear (line 294) | func (a *SortedArray) Clear() *SortedArray {
    method LockFunc (line 301) | func (a *SortedArray) LockFunc(f func(array []any)) *SortedArray {
    method RLockFunc (line 308) | func (a *SortedArray) RLockFunc(f func(array []any)) *SortedArray {
    method Merge (line 318) | func (a *SortedArray) Merge(array any) *SortedArray {
    method Chunk (line 325) | func (a *SortedArray) Chunk(size int) [][]any {
    method Rand (line 331) | func (a *SortedArray) Rand() (value any, found bool) {
    method Rands (line 337) | func (a *SortedArray) Rands(size int) []any {
    method Join (line 343) | func (a *SortedArray) Join(glue string) string {
    method CountValues (line 349) | func (a *SortedArray) CountValues() map[any]int {
    method Iterator (line 355) | func (a *SortedArray) Iterator(f func(k int, v any) bool) {
    method IteratorAsc (line 362) | func (a *SortedArray) IteratorAsc(f func(k int, v any) bool) {
    method IteratorDesc (line 369) | func (a *SortedArray) IteratorDesc(f func(k int, v any) bool) {
    method String (line 375) | func (a *SortedArray) String() string {
    method MarshalJSON (line 385) | func (a SortedArray) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 392) | func (a *SortedArray) UnmarshalJSON(b []byte) error {
    method UnmarshalValue (line 399) | func (a *SortedArray) UnmarshalValue(value any) (err error) {
    method FilterNil (line 405) | func (a *SortedArray) FilterNil() *SortedArray {
    method Filter (line 414) | func (a *SortedArray) Filter(filter func(index int, value any) bool) *...
    method FilterEmpty (line 422) | func (a *SortedArray) FilterEmpty() *SortedArray {
    method Walk (line 429) | func (a *SortedArray) Walk(f func(value any) any) *SortedArray {
    method IsEmpty (line 436) | func (a *SortedArray) IsEmpty() bool {
    method DeepCopy (line 442) | func (a *SortedArray) DeepCopy() any {
  function NewSortedArray (line 42) | func NewSortedArray(comparator func(a, b any) int, safe ...bool) *Sorted...
  function NewSortedArraySize (line 49) | func NewSortedArraySize(cap int, comparator func(a, b any) int, safe ......
  function NewSortedArrayRange (line 57) | func NewSortedArrayRange(start, end, step int, comparator func(a, b any)...
  function NewSortedArrayFrom (line 73) | func NewSortedArrayFrom(array []any, comparator func(a, b any) int, safe...
  function NewSortedArrayFromCopy (line 85) | func NewSortedArrayFromCopy(array []any, comparator func(a, b any) int, ...

FILE: container/garray/garray_sorted_int.go
  type SortedIntArray (line 21) | type SortedIntArray struct
    method lazyInit (line 27) | func (a *SortedIntArray) lazyInit() {
    method At (line 98) | func (a *SortedIntArray) At(index int) (value int) {
    method SetArray (line 104) | func (a *SortedIntArray) SetArray(array []int) *SortedIntArray {
    method Sort (line 113) | func (a *SortedIntArray) Sort() *SortedIntArray {
    method Add (line 121) | func (a *SortedIntArray) Add(values ...int) *SortedIntArray {
    method Append (line 127) | func (a *SortedIntArray) Append(values ...int) *SortedIntArray {
    method Get (line 135) | func (a *SortedIntArray) Get(index int) (value int, found bool) {
    method Remove (line 142) | func (a *SortedIntArray) Remove(index int) (value int, found bool) {
    method RemoveValue (line 149) | func (a *SortedIntArray) RemoveValue(value int) bool {
    method RemoveValues (line 155) | func (a *SortedIntArray) RemoveValues(values ...int) {
    method PopLeft (line 162) | func (a *SortedIntArray) PopLeft() (value int, found bool) {
    method PopRight (line 169) | func (a *SortedIntArray) PopRight() (value int, found bool) {
    method PopRand (line 176) | func (a *SortedIntArray) PopRand() (value int, found bool) {
    method PopRands (line 184) | func (a *SortedIntArray) PopRands(size int) []int {
    method PopLefts (line 192) | func (a *SortedIntArray) PopLefts(size int) []int {
    method PopRights (line 200) | func (a *SortedIntArray) PopRights(size int) []int {
    method Range (line 212) | func (a *SortedIntArray) Range(start int, end ...int) []int {
    method SubSlice (line 230) | func (a *SortedIntArray) SubSlice(offset int, length ...int) []int {
    method Len (line 236) | func (a *SortedIntArray) Len() int {
    method Sum (line 242) | func (a *SortedIntArray) Sum() (sum int) {
    method Slice (line 250) | func (a *SortedIntArray) Slice() []int {
    method Interfaces (line 256) | func (a *SortedIntArray) Interfaces() []any {
    method Contains (line 262) | func (a *SortedIntArray) Contains(value int) bool {
    method Search (line 269) | func (a *SortedIntArray) Search(value int) (index int) {
    method SetUnique (line 277) | func (a *SortedIntArray) SetUnique(unique bool) *SortedIntArray {
    method Unique (line 284) | func (a *SortedIntArray) Unique() *SortedIntArray {
    method Clone (line 291) | func (a *SortedIntArray) Clone() (newArray *SortedIntArray) {
    method Clear (line 299) | func (a *SortedIntArray) Clear() *SortedIntArray {
    method LockFunc (line 306) | func (a *SortedIntArray) LockFunc(f func(array []int)) *SortedIntArray {
    method RLockFunc (line 313) | func (a *SortedIntArray) RLockFunc(f func(array []int)) *SortedIntArray {
    method Merge (line 323) | func (a *SortedIntArray) Merge(array any) *SortedIntArray {
    method Chunk (line 331) | func (a *SortedIntArray) Chunk(size int) [][]int {
    method Rand (line 337) | func (a *SortedIntArray) Rand() (value int, found bool) {
    method Rands (line 343) | func (a *SortedIntArray) Rands(size int) []int {
    method Join (line 349) | func (a *SortedIntArray) Join(glue string) string {
    method CountValues (line 355) | func (a *SortedIntArray) CountValues() map[int]int {
    method Iterator (line 361) | func (a *SortedIntArray) Iterator(f func(k int, v int) bool) {
    method IteratorAsc (line 368) | func (a *SortedIntArray) IteratorAsc(f func(k int, v int) bool) {
    method IteratorDesc (line 375) | func (a *SortedIntArray) IteratorDesc(f func(k int, v int) bool) {
    method String (line 381) | func (a *SortedIntArray) String() string {
    method MarshalJSON (line 391) | func (a SortedIntArray) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 397) | func (a *SortedIntArray) UnmarshalJSON(b []byte) error {
    method UnmarshalValue (line 409) | func (a *SortedIntArray) UnmarshalValue(value any) (err error) {
    method Filter (line 422) | func (a *SortedIntArray) Filter(filter func(index int, value int) bool...
    method FilterEmpty (line 429) | func (a *SortedIntArray) FilterEmpty() *SortedIntArray {
    method Walk (line 462) | func (a *SortedIntArray) Walk(f func(value int) int) *SortedIntArray {
    method IsEmpty (line 469) | func (a *SortedIntArray) IsEmpty() bool {
    method DeepCopy (line 475) | func (a *SortedIntArray) DeepCopy() any {
  function NewSortedIntArray (line 39) | func NewSortedIntArray(safe ...bool) *SortedIntArray {
  function NewSortedIntArrayComparator (line 45) | func NewSortedIntArrayComparator(comparator func(a, b int) int, safe ......
  function NewSortedIntArraySize (line 54) | func NewSortedIntArraySize(cap int, safe ...bool) *SortedIntArray {
  function NewSortedIntArrayRange (line 64) | func NewSortedIntArrayRange(start, end, step int, safe ...bool) *SortedI...
  function NewSortedIntArrayFrom (line 80) | func NewSortedIntArrayFrom(array []int, safe ...bool) *SortedIntArray {
  function NewSortedIntArrayFromCopy (line 90) | func NewSortedIntArrayFromCopy(array []int, safe ...bool) *SortedIntArray {

FILE: container/garray/garray_sorted_str.go
  type SortedStrArray (line 23) | type SortedStrArray struct
    method lazyInit (line 29) | func (a *SortedStrArray) lazyInit() {
    method SetArray (line 84) | func (a *SortedStrArray) SetArray(array []string) *SortedStrArray {
    method At (line 92) | func (a *SortedStrArray) At(index int) (value string) {
    method Sort (line 100) | func (a *SortedStrArray) Sort() *SortedStrArray {
    method Add (line 108) | func (a *SortedStrArray) Add(values ...string) *SortedStrArray {
    method Append (line 115) | func (a *SortedStrArray) Append(values ...string) *SortedStrArray {
    method Get (line 123) | func (a *SortedStrArray) Get(index int) (value string, found bool) {
    method Remove (line 130) | func (a *SortedStrArray) Remove(index int) (value string, found bool) {
    method RemoveValue (line 137) | func (a *SortedStrArray) RemoveValue(value string) bool {
    method RemoveValues (line 143) | func (a *SortedStrArray) RemoveValues(values ...string) {
    method PopLeft (line 150) | func (a *SortedStrArray) PopLeft() (value string, found bool) {
    method PopRight (line 157) | func (a *SortedStrArray) PopRight() (value string, found bool) {
    method PopRand (line 164) | func (a *SortedStrArray) PopRand() (value string, found bool) {
    method PopRands (line 172) | func (a *SortedStrArray) PopRands(size int) []string {
    method PopLefts (line 180) | func (a *SortedStrArray) PopLefts(size int) []string {
    method PopRights (line 188) | func (a *SortedStrArray) PopRights(size int) []string {
    method Range (line 200) | func (a *SortedStrArray) Range(start int, end ...int) []string {
    method SubSlice (line 218) | func (a *SortedStrArray) SubSlice(offset int, length ...int) []string {
    method Sum (line 224) | func (a *SortedStrArray) Sum() (sum int) {
    method Len (line 230) | func (a *SortedStrArray) Len() int {
    method Slice (line 238) | func (a *SortedStrArray) Slice() []string {
    method Interfaces (line 244) | func (a *SortedStrArray) Interfaces() []any {
    method Contains (line 250) | func (a *SortedStrArray) Contains(value string) bool {
    method ContainsI (line 257) | func (a *SortedStrArray) ContainsI(value string) bool {
    method Search (line 274) | func (a *SortedStrArray) Search(value string) (index int) {
    method SetUnique (line 282) | func (a *SortedStrArray) SetUnique(unique bool) *SortedStrArray {
    method Unique (line 289) | func (a *SortedStrArray) Unique() *SortedStrArray {
    method Clone (line 296) | func (a *SortedStrArray) Clone() (newArray *SortedStrArray) {
    method Clear (line 304) | func (a *SortedStrArray) Clear() *SortedStrArray {
    method LockFunc (line 311) | func (a *SortedStrArray) LockFunc(f func(array []string)) *SortedStrAr...
    method RLockFunc (line 318) | func (a *SortedStrArray) RLockFunc(f func(array []string)) *SortedStrA...
    method Merge (line 328) | func (a *SortedStrArray) Merge(array any) *SortedStrArray {
    method Chunk (line 336) | func (a *SortedStrArray) Chunk(size int) [][]string {
    method Rand (line 342) | func (a *SortedStrArray) Rand() (value string, found bool) {
    method Rands (line 348) | func (a *SortedStrArray) Rands(size int) []string {
    method Join (line 354) | func (a *SortedStrArray) Join(glue string) string {
    method CountValues (line 360) | func (a *SortedStrArray) CountValues() map[string]int {
    method Iterator (line 366) | func (a *SortedStrArray) Iterator(f func(k int, v string) bool) {
    method IteratorAsc (line 373) | func (a *SortedStrArray) IteratorAsc(f func(k int, v string) bool) {
    method IteratorDesc (line 380) | func (a *SortedStrArray) IteratorDesc(f func(k int, v string) bool) {
    method String (line 386) | func (a *SortedStrArray) String() string {
    method MarshalJSON (line 407) | func (a SortedStrArray) MarshalJSON() ([]byte, error) {
    method UnmarshalJSON (line 413) | func (a *SortedStrArray) UnmarshalJSON(b []byte) error {
    method UnmarshalValue (line 424) | func (a *SortedStrArray) UnmarshalValue(value any) (err error) {
    method Filter (line 437) | func (a *SortedStrArray) Filter(filter func(index int, value string) b...
    method FilterEmpty (line 444) | func (a *SortedStrArray) FilterEmpty() *SortedStrArray {
    method Walk (line 477) | func (a *SortedStrArray) Walk(f func(value string) string) *SortedStrA...
    method IsEmpty (line 484) | func (a *SortedStrArray) IsEmpty() bool {
    method DeepCopy (line 490) | func (a *SortedStrArray) DeepCopy() any {
  function NewSortedStrArray (line 41) | func NewSortedStrArray(safe ...bool) *SortedStrArray {
  function NewSortedStrArrayComparator (line 47) | func NewSortedStrArrayComparator(comparator func(a, b string) int, safe ...
  function NewSortedStrArraySize (line 56) | func NewSortedStrArraySize(cap int, safe ...bool) *SortedStrArray {
  function NewSortedStrArrayFrom (line 67) | func NewSortedStrArrayFrom(array []string, safe ...bool) *SortedStrArray {
  function NewSortedStrArrayFromCopy (line 77) | func NewSortedStrArrayFromCopy(array []string, safe ...bool) *SortedStrA...

FILE: container/garray/garray_sorted_t.go
  type SortedTArray (line 28) | type SortedTArray struct
  function NewSortedTArray (line 42) | func NewSortedTArray[T comparable](comparator func(a, b T) int, safe ......
  function NewSortedTArraySize (line 52) | func NewSortedTArraySize[T comparable](cap int, comparator func(a, b T) ...
  function NewSortedTArrayFrom (line 67) | func NewSortedTArrayFrom[T comparable](array []T, comparator func(a, b T...
  function NewSortedTArrayFromCopy (line 80) | func NewSortedTArrayFromCopy[T comparable](array []T, comparator func(a,...
  method getSorter (line 89) | func (a *SortedTArray[T]) getSorter() func(values []T, comparator func(a...
  method At (line 99) | func (a *SortedTArray[T]) At(index int) (value T) {
  method SetArray (line 105) | func (a *SortedTArray[T]) SetArray(array []T) *SortedTArray[T] {
  method SetSorter (line 115) | func (a *SortedTArray[T]) SetSorter(sorter func(values []T, comparator f...
  method SetComparator (line 126) | func (a *SortedTArray[T]) SetComparator(comparator func(a, b T) int) {
  method Sort (line 139) | func (a *SortedTArray[T]) Sort() *SortedTArray[T] {
  method Add (line 150) | func (a *SortedTArray[T]) Add(values ...T) *SortedTArray[T] {
  method Append (line 155) | func (a *SortedTArray[T]) Append(values ...T) *SortedTArray[T] {
  method Get (line 180) | func (a *SortedTArray[T]) Get(index int) (value T, found bool) {
  method Remove (line 192) | func (a *SortedTArray[T]) Remove(index int) (value T, found bool) {
  method doRemoveWithoutLock (line 199) | func (a *SortedTArray[T]) doRemoveWithoutLock(index int) (value T, found...
  method RemoveValue (line 224) | func (a *SortedTArray[T]) RemoveValue(value T) bool {
  method RemoveValues (line 235) | func (a *SortedTArray[T]) RemoveValues(values ...T) {
  method PopLeft (line 247) | func (a *SortedTArray[T]) PopLeft() (value T, found bool) {
  method PopRight (line 261) | func (a *SortedTArray[T]) PopRight() (value T, found bool) {
  method PopRand (line 276) | func (a *SortedTArray[T]) PopRand() (value T, found bool) {
  method PopRands (line 283) | func (a *SortedTArray[T]) PopRands(size int) []T {
  method PopLefts (line 300) | func (a *SortedTArray[T]) PopLefts(size int) []T {
  method PopRights (line 317) | func (a *SortedTArray[T]) PopRights(size int) []T {
  method Range (line 341) | func (a *SortedTArray[T]) Range(start int, end ...int) []T {
  method SubSlice (line 377) | func (a *SortedTArray[T]) SubSlice(offset int, length ...int) []T {
  method Sum (line 415) | func (a *SortedTArray[T]) Sum() (sum int) {
  method Len (line 425) | func (a *SortedTArray[T]) Len() int {
  method Slice (line 435) | func (a *SortedTArray[T]) Slice() []T {
  method Interfaces (line 449) | func (a *SortedTArray[T]) Interfaces() []any {
  method Contains (line 454) | func (a *SortedTArray[T]) Contains(value T) bool {
  method Search (line 460) | func (a *SortedTArray[T]) Search(value T) (index int) {
  method binSearch (line 472) | func (a *SortedTArray[T]) binSearch(value T, lock bool) (index int, resu...
  method SetUnique (line 502) | func (a *SortedTArray[T]) SetUnique(unique bool) *SortedTArray[T] {
  method Unique (line 512) | func (a *SortedTArray[T]) Unique() *SortedTArray[T] {
  method Clone (line 529) | func (a *SortedTArray[T]) Clone() (newArray *SortedTArray[T]) {
  method Clear (line 538) | func (a *SortedTArray[T]) Clear() *SortedTArray[T] {
  method LockFunc (line 548) | func (a *SortedTArray[T]) LockFunc(f func(array []T)) *SortedTArray[T] {
  method RLockFunc (line 560) | func (a *SortedTArray[T]) RLockFunc(f func(array []T)) *SortedTArray[T] {
  method Merge (line 571) | func (a *SortedTArray[T]) Merge(array any) *SortedTArray[T] {
  method Chunk (line 593) | func (a *SortedTArray[T]) Chunk(size int) [][]T {
  method Rand (line 614) | func (a *SortedTArray[T]) Rand() (value T, found bool) {
  method Rands (line 625) | func (a *SortedTArray[T]) Rands(size int) []T {
  method Join (line 639) | func (a *SortedTArray[T]) Join(glue string) string {
  method CountValues (line 656) | func (a *SortedTArray[T]) CountValues() map[T]int {
  method Iterator (line 667) | func (a *SortedTArray[T]) Iterator(f func(k int, v T) bool) {
  method IteratorAsc (line 673) | func (a *SortedTArray[T]) IteratorAsc(f func(k int, v T) bool) {
  method IteratorDesc (line 685) | func (a *SortedTArray[T]) IteratorDesc(f func(k int, v T) bool) {
  method String (line 696) | func (a *SortedTArray[T]) String() string {
  method MarshalJSON (line 724) | func (a SortedTArray[T]) MarshalJSON() ([]byte, error) {
  method UnmarshalJSON (line 732) | func (a *SortedTArray[T]) UnmarshalJSON(b []byte) error {
  method UnmarshalValue (line 750) | func (a *SortedTArray[T]) UnmarshalValue(value any) (err error) {
  method FilterNil (line 771) | func (a *SortedTArray[T]) FilterNil() *SortedTArray[T] {
  method Filter (line 787) | func (a *SortedTArray[T]) Filter(filter func(index int, value T) bool) *...
  method FilterEmpty (line 802) | func (a *SortedTArray[T]) FilterEmpty() *SortedTArray[T] {
  method Walk (line 816) | func (a *SortedTArray[T]) Walk(f func(value T) T) *SortedTArray[T] {
  method IsEmpty (line 829) | func (a *SortedTArray[T]) IsEmpty() bool {
  method getComparator (line 835) | func (a *SortedTArray[T]) getComparator() func(a, b T) int {
  method DeepCopy (line 843) | func (a *SortedTArray[T]) DeepCopy() any {

FILE: container/garray/garray_z_bench_any_test.go
  type anySortedArrayItem (line 15) | type anySortedArrayItem struct
  function Benchmark_AnyArray_Add (line 27) | func Benchmark_AnyArray_Add(b *testing.B) {
  function Benchmark_AnySortedArray_Add (line 33) | func Benchmark_AnySortedArray_Add(b *testing.B) {

FILE: container/garray/garray_z_example_normal_any_test.go
  function ExampleNew (line 17) | func ExampleNew() {
  function ExampleArray_Iterator (line 79) | func ExampleArray_Iterator() {
  function ExampleArray_Reverse (line 104) | func ExampleArray_Reverse() {
  function ExampleArray_Shuffle (line 114) | func ExampleArray_Shuffle() {
  function ExampleArray_Rands (line 121) | func ExampleArray_Rands() {
  function ExampleArray_PopRand (line 133) | func ExampleArray_PopRand() {
  function ExampleArray_Join (line 145) | func ExampleArray_Join() {
  function ExampleArray_Chunk (line 153) | func ExampleArray_Chunk() {
  function ExampleArray_PopLeft (line 165) | func ExampleArray_PopLeft() {
  function ExampleArray_PopLefts (line 182) | func ExampleArray_PopLefts() {
  function ExampleArray_PopRight (line 199) | func ExampleArray_PopRight() {
  function ExampleArray_PopRights (line 216) | func ExampleArray_PopRights() {
  function ExampleArray_Contains (line 233) | func ExampleArray_Contains() {
  function ExampleArray_Merge (line 246) | func ExampleArray_Merge() {
  function ExampleArray_Filter (line 265) | func ExampleArray_Filter() {
  function ExampleArray_FilterEmpty (line 280) | func ExampleArray_FilterEmpty() {
  function ExampleArray_FilterNil (line 291) | func ExampleArray_FilterNil() {

FILE: container/garray/garray_z_example_normal_int_test.go
  function ExampleIntArray_Walk (line 19) | func ExampleIntArray_Walk() {
  function ExampleNewIntArray (line 34) | func ExampleNewIntArray() {
  function ExampleNewIntArraySize (line 46) | func ExampleNewIntArraySize() {
  function ExampleNewIntArrayRange (line 58) | func ExampleNewIntArrayRange() {
  function ExampleNewIntArrayFrom (line 66) | func ExampleNewIntArrayFrom() {
  function ExampleNewIntArrayFromCopy (line 74) | func ExampleNewIntArrayFromCopy() {
  function ExampleIntArray_At (line 82) | func ExampleIntArray_At() {
  function ExampleIntArray_Get (line 91) | func ExampleIntArray_Get() {
  function ExampleIntArray_Set (line 103) | func ExampleIntArray_Set() {
  function ExampleIntArray_SetArray (line 115) | func ExampleIntArray_SetArray() {
  function ExampleIntArray_Replace (line 124) | func ExampleIntArray_Replace() {
  function ExampleIntArray_Sum (line 136) | func ExampleIntArray_Sum() {
  function ExampleIntArray_Sort (line 146) | func ExampleIntArray_Sort() {
  function ExampleIntArray_SortFunc (line 156) | func ExampleIntArray_SortFunc() {
  function ExampleIntArray_InsertBefore (line 175) | func ExampleIntArray_InsertBefore() {
  function ExampleIntArray_InsertAfter (line 185) | func ExampleIntArray_InsertAfter() {
  function ExampleIntArray_Remove (line 195) | func ExampleIntArray_Remove() {
  function ExampleIntArray_RemoveValue (line 207) | func ExampleIntArray_RemoveValue() {
  function ExampleIntArray_PushLeft (line 219) | func ExampleIntArray_PushLeft() {
  function ExampleIntArray_PushRight (line 231) | func ExampleIntArray_PushRight() {
  function ExampleIntArray_PopLeft (line 243) | func ExampleIntArray_PopLeft() {
  function ExampleIntArray_PopRight (line 255) | func ExampleIntArray_PopRight() {
  function ExampleIntArray_PopRand (line 267) | func ExampleIntArray_PopRand() {
  function ExampleIntArray_PopRands (line 281) | func ExampleIntArray_PopRands() {
  function ExampleIntArray_PopLefts (line 295) | func ExampleIntArray_PopLefts() {
  function ExampleIntArray_PopRights (line 309) | func ExampleIntArray_PopRights() {
  function ExampleIntArray_Range (line 323) | func ExampleIntArray_Range() {
  function ExampleIntArray_SubSlice (line 335) | func ExampleIntArray_SubSlice() {
  function ExampleIntArray_Append (line 347) | func ExampleIntArray_Append() {
  function ExampleIntArray_Len (line 359) | func ExampleIntArray_Len() {
  function ExampleIntArray_Slice (line 370) | func ExampleIntArray_Slice() {
  function ExampleIntArray_Interfaces (line 379) | func ExampleIntArray_Interfaces() {
  function ExampleIntArray_Clone (line 389) | func ExampleIntArray_Clone() {
  function ExampleIntArray_Clear (line 401) | func ExampleIntArray_Clear() {
  function ExampleIntArray_Contains (line 414) | func ExampleIntArray_Contains() {
  function ExampleIntArray_Search (line 425) | func ExampleIntArray_Search() {
  function ExampleIntArray_Unique (line 436) | func ExampleIntArray_Unique() {
  function ExampleIntArray_LockFunc (line 447) | func ExampleIntArray_LockFunc() {
  function ExampleIntArray_RLockFunc (line 464) | func ExampleIntArray_RLockFunc() {
  function ExampleIntArray_Merge (line 482) | func ExampleIntArray_Merge() {
  function ExampleIntArray_Fill (line 498) | func ExampleIntArray_Fill() {
  function ExampleIntArray_Chunk (line 509) | func ExampleIntArray_Chunk() {
  function ExampleIntArray_Pad (line 520) | func ExampleIntArray_Pad() {
  function ExampleIntArray_Rand (line 532) | func ExampleIntArray_Rand() {
  function ExampleIntArray_Rands (line 542) | func ExampleIntArray_Rands() {
  function ExampleIntArray_Shuffle (line 552) | func ExampleIntArray_Shuffle() {
  function ExampleIntArray_Reverse (line 562) | func ExampleIntArray_Reverse() {
  function ExampleIntArray_Join (line 572) | func ExampleIntArray_Join() {
  function ExampleIntArray_CountValues (line 582) | func ExampleIntArray_CountValues() {
  function ExampleIntArray_Iterator (line 590) | func ExampleIntArray_Iterator() {
  function ExampleIntArray_IteratorAsc (line 607) | func ExampleIntArray_IteratorAsc() {
  function ExampleIntArray_IteratorDesc (line 624) | func ExampleIntArray_IteratorDesc() {
  function ExampleIntArray_String (line 641) | func ExampleIntArray_String() {
  function ExampleIntArray_MarshalJSON (line 651) | func ExampleIntArray_MarshalJSON() {
  function ExampleIntArray_UnmarshalJSON (line 671) | func ExampleIntArray_UnmarshalJSON() {
  function ExampleIntArray_UnmarshalValue (line 686) | func ExampleIntArray_UnmarshalValue() {
  function ExampleIntArray_Filter (line 703) | func ExampleIntArray_Filter() {
  function ExampleIntArray_FilterEmpty (line 722) | func ExampleIntArray_FilterEmpty() {
  function ExampleIntArray_IsEmpty (line 732) | func ExampleIntArray_IsEmpty() {

FILE: container/garray/garray_z_example_normal_str_test.go
  function ExampleStrArray_Walk (line 21) | func ExampleStrArray_Walk() {
  function ExampleNewStrArray (line 36) | func ExampleNewStrArray() {
  function ExampleNewStrArraySize (line 48) | func ExampleNewStrArraySize() {
  function ExampleNewStrArrayFrom (line 60) | func ExampleNewStrArrayFrom() {
  function ExampleStrArray_At (line 68) | func ExampleStrArray_At() {
  function ExampleStrArray_Get (line 77) | func ExampleStrArray_Get() {
  function ExampleStrArray_Set (line 86) | func ExampleStrArray_Set() {
  function ExampleStrArray_SetArray (line 98) | func ExampleStrArray_SetArray() {
  function ExampleStrArray_Replace (line 107) | func ExampleStrArray_Replace() {
  function ExampleStrArray_Sum (line 119) | func ExampleStrArray_Sum() {
  function ExampleStrArray_Sort (line 129) | func ExampleStrArray_Sort() {
  function ExampleStrArray_SortFunc (line 139) | func ExampleStrArray_SortFunc() {
  function ExampleStrArray_InsertBefore (line 157) | func ExampleStrArray_InsertBefore() {
  function ExampleStrArray_InsertAfter (line 167) | func ExampleStrArray_InsertAfter() {
  function ExampleStrArray_Remove (line 177) | func ExampleStrArray_Remove() {
  function ExampleStrArray_RemoveValue (line 187) | func ExampleStrArray_RemoveValue() {
  function ExampleStrArray_PushLeft (line 197) | func ExampleStrArray_PushLeft() {
  function ExampleStrArray_PushRight (line 207) | func ExampleStrArray_PushRight() {
  function ExampleStrArray_PopLeft (line 217) | func ExampleStrArray_PopLeft() {
  function ExampleStrArray_PopRight (line 227) | func ExampleStrArray_PopRight() {
  function ExampleStrArray_PopRand (line 237) | func ExampleStrArray_PopRand() {
  function ExampleStrArray_PopRands (line 247) | func ExampleStrArray_PopRands() {
  function ExampleStrArray_PopLefts (line 257) | func ExampleStrArray_PopLefts() {
  function ExampleStrArray_PopRights (line 269) | func ExampleStrArray_PopRights() {
  function ExampleStrArray_Range (line 281) | func ExampleStrArray_Range() {
  function ExampleStrArray_SubSlice (line 291) | func ExampleStrArray_SubSlice() {
  function ExampleStrArray_Append (line 301) | func ExampleStrArray_Append() {
  function ExampleStrArray_Len (line 311) | func ExampleStrArray_Len() {
  function ExampleStrArray_Slice (line 320) | func ExampleStrArray_Slice() {
  function ExampleStrArray_Interfaces (line 329) | func ExampleStrArray_Interfaces() {
  function ExampleStrArray_Clone (line 339) | func ExampleStrArray_Clone() {
  function ExampleStrArray_Clear (line 351) | func ExampleStrArray_Clear() {
  function ExampleStrArray_Contains (line 364) | func ExampleStrArray_Contains() {
  function ExampleStrArray_ContainsI (line 375) | func ExampleStrArray_ContainsI() {
  function ExampleStrArray_Search (line 386) | func ExampleStrArray_Search() {
  function ExampleStrArray_Unique (line 397) | func ExampleStrArray_Unique() {
  function ExampleStrArray_LockFunc (line 406) | func ExampleStrArray_LockFunc() {
  function ExampleStrArray_RLockFunc (line 417) | func ExampleStrArray_RLockFunc() {
  function ExampleStrArray_Merge (line 433) | func ExampleStrArray_Merge() {
  function ExampleStrArray_Fill (line 445) | func ExampleStrArray_Fill() {
  function ExampleStrArray_Chunk (line 454) | func ExampleStrArray_Chunk() {
  function ExampleStrArray_Pad (line 463) | func ExampleStrArray_Pad() {
  function ExampleStrArray_Rand (line 475) | func ExampleStrArray_Rand() {
  function ExampleStrArray_Rands (line 483) | func ExampleStrArray_Rands() {
  function ExampleStrArray_Shuffle (line 491) | func ExampleStrArray_Shuffle() {
  function ExampleStrArray_Reverse (line 499) | func ExampleStrArray_Reverse() {
  function ExampleStrArray_Join (line 507) | func ExampleStrArray_Join() {
  function ExampleStrArray_CountValues (line 515) | func ExampleStrArray_CountValues() {
  function ExampleStrArray_Iterator (line 523) | func ExampleStrArray_Iterator() {
  function ExampleStrArray_IteratorAsc (line 536) | func ExampleStrArray_IteratorAsc() {
  function ExampleStrArray_IteratorDesc (line 549) | func ExampleStrArray_IteratorDesc() {
  function ExampleStrArray_String (line 562) | func ExampleStrArray_String() {
  function ExampleStrArray_MarshalJSON (line 570) | func ExampleStrArray_MarshalJSON() {
  function ExampleStrArray_UnmarshalJSON (line 588) | func ExampleStrArray_UnmarshalJSON() {
  function ExampleStrArray_UnmarshalValue (line 603) | func ExampleStrArray_UnmarshalValue() {
  function ExampleStrArray_Filter (line 627) | func ExampleStrArray_Filter() {
  function ExampleStrArray_FilterEmpty (line 643) | func ExampleStrArray_FilterEmpty() {
  function ExampleStrArray_IsEmpty (line 651) | func ExampleStrArray_IsEmpty() {

FILE: container/garray/garray_z_example_normal_t_test.go
  function ExampleTArray_Walk (line 21) | func ExampleTArray_Walk() {
  function ExampleNewTArray (line 51) | func ExampleNewTArray() {
  function ExampleNewTArraySize (line 75) | func ExampleNewTArraySize() {
  function ExampleNewTArrayFrom (line 99) | func ExampleNewTArrayFrom() {
  function ExampleNewTArrayFromCopy (line 115) | func ExampleNewTArrayFromCopy() {
  function ExampleTArray_At (line 131) | func ExampleTArray_At() {
  function ExampleTArray_Get (line 149) | func ExampleTArray_Get() {
  function ExampleTArray_Set (line 169) | func ExampleTArray_Set() {
  function ExampleTArray_SetArray (line 192) | func ExampleTArray_SetArray() {
  function ExampleTArray_Replace (line 209) | func ExampleTArray_Replace() {
  function ExampleTArray_Sum (line 232) | func ExampleTArray_Sum() {
  function ExampleTArray_SortFunc (line 250) | func ExampleTArray_SortFunc() {
  function ExampleTArray_InsertBefore (line 287) | func ExampleTArray_InsertBefore() {
  function ExampleTArray_InsertAfter (line 306) | func ExampleTArray_InsertAfter() {
  function ExampleTArray_Remove (line 324) | func ExampleTArray_Remove() {
  function ExampleTArray_RemoveValue (line 344) | func ExampleTArray_RemoveValue() {
  function ExampleTArray_PushLeft (line 366) | func ExampleTArray_PushLeft() {
  function ExampleTArray_PushRight (line 387) | func ExampleTArray_PushRight() {
  function ExampleTArray_PopLeft (line 407) | func ExampleTArray_PopLeft() {
  function ExampleTArray_PopRight (line 427) | func ExampleTArray_PopRight() {
  function ExampleTArray_PopRand (line 447) | func ExampleTArray_PopRand() {
  function ExampleTArray_PopRands (line 470) | func ExampleTArray_PopRands() {
  function ExampleTArray_PopLefts (line 492) | func ExampleTArray_PopLefts() {
  function ExampleTArray_PopRights (line 516) | func ExampleTArray_PopRights() {
  function ExampleTArray_Range (line 541) | func ExampleTArray_Range() {
  function ExampleTArray_SubSlice (line 561) | func ExampleTArray_SubSlice() {
  function ExampleTArray_Append (line 581) | func ExampleTArray_Append() {
  function ExampleTArray_Len (line 601) | func ExampleTArray_Len() {
  function ExampleTArray_Slice (line 619) | func ExampleTArray_Slice() {
  function ExampleTArray_Interfaces (line 635) | func ExampleTArray_Interfaces() {
  function ExampleTArray_Clone (line 653) | func ExampleTArray_Clone() {
  function ExampleTArray_Clear (line 675) | func ExampleTArray_Clear() {
  function ExampleTArray_Contains (line 699) | func ExampleTArray_Contains() {
  function ExampleTArray_Search (line 719) | func ExampleTArray_Search() {
  function ExampleTArray_Unique (line 739) | func ExampleTArray_Unique() {
  function ExampleTArray_LockFunc (line 757) | func ExampleTArray_LockFunc() {
  function ExampleTArray_RLockFunc (line 783) | func ExampleTArray_RLockFunc() {
  function ExampleTArray_Merge (line 815) | func ExampleTArray_Merge() {
  function ExampleTArray_Fill (line 841) | func ExampleTArray_Fill() {
  function ExampleTArray_Chunk (line 859) | func ExampleTArray_Chunk() {
  function ExampleTArray_Pad (line 878) | func ExampleTArray_Pad() {
  function ExampleTArray_Rand (line 901) | func ExampleTArray_Rand() {
  function ExampleTArray_Rands (line 918) | func ExampleTArray_Rands() {
  function ExampleTArray_Shuffle (line 935) | func ExampleTArray_Shuffle() {
  function ExampleTArray_Reverse (line 952) | func ExampleTArray_Reverse() {
  function ExampleTArray_Join (line 969) | func ExampleTArray_Join() {
  function ExampleTArray_CountValues (line 986) | func ExampleTArray_CountValues() {
  function ExampleTArray_Iterator (line 1001) | func ExampleTArray_Iterator() {
  function ExampleTArray_IteratorAsc (line 1030) | func ExampleTArray_IteratorAsc() {
  function ExampleTArray_IteratorDesc (line 1059) | func ExampleTArray_IteratorDesc() {
  function ExampleTArray_String (line 1088) | func ExampleTArray_String() {
  function ExampleTArray_MarshalJSON (line 1105) | func ExampleTArray_MarshalJSON() {
  function ExampleTArray_UnmarshalJSON (line 1142) | func ExampleTArray_UnmarshalJSON() {
  function ExampleTArray_UnmarshalValue (line 1171) | func ExampleTArray_UnmarshalValue() {
  function ExampleTArray_Filter (line 1211) | func ExampleTArray_Filter() {
  function ExampleTArray_FilterEmpty (line 1245) | func ExampleTArray_FilterEmpty() {
  function ExampleTArray_IsEmpty (line 1262) | func ExampleTArray_IsEmpty() {

FILE: container/garray/garray_z_example_sorted_str_test.go
  function ExampleSortedStrArray_Walk (line 19) | func ExampleSortedStrArray_Walk() {
  function ExampleNewSortedStrArray (line 34) | func ExampleNewSortedStrArray() {
  function ExampleNewSortedStrArraySize (line 46) | func ExampleNewSortedStrArraySize() {
  function ExampleNewStrArrayFromCopy (line 55) | func ExampleNewStrArrayFromCopy() {
  function ExampleSortedStrArray_At (line 63) | func ExampleSortedStrArray_At() {
  function ExampleSortedStrArray_Get (line 75) | func ExampleSortedStrArray_Get() {
  function ExampleSortedStrArray_SetArray (line 86) | func ExampleSortedStrArray_SetArray() {
  function ExampleSortedStrArray_SetUnique (line 95) | func ExampleSortedStrArray_SetUnique() {
  function ExampleSortedStrArray_Sum (line 104) | func ExampleSortedStrArray_Sum() {
  function ExampleSortedStrArray_Sort (line 116) | func ExampleSortedStrArray_Sort() {
  function ExampleSortedStrArray_Remove (line 128) | func ExampleSortedStrArray_Remove() {
  function ExampleSortedStrArray_RemoveValue (line 140) | func ExampleSortedStrArray_RemoveValue() {
  function ExampleSortedStrArray_PopLeft (line 152) | func ExampleSortedStrArray_PopLeft() {
  function ExampleSortedStrArray_PopRight (line 164) | func ExampleSortedStrArray_PopRight() {
  function ExampleSortedStrArray_PopRights (line 178) | func ExampleSortedStrArray_PopRights() {
  function ExampleSortedStrArray_Rand (line 190) | func ExampleSortedStrArray_Rand() {
  function ExampleSortedStrArray_PopRands (line 202) | func ExampleSortedStrArray_PopRands() {
  function ExampleSortedStrArray_PopLefts (line 214) | func ExampleSortedStrArray_PopLefts() {
  function ExampleSortedStrArray_Range (line 226) | func ExampleSortedStrArray_Range() {
  function ExampleSortedStrArray_SubSlice (line 236) | func ExampleSortedStrArray_SubSlice() {
  function ExampleSortedStrArray_Add (line 248) | func ExampleSortedStrArray_Add() {
  function ExampleSortedStrArray_Append (line 257) | func ExampleSortedStrArray_Append() {
  function ExampleSortedStrArray_Len (line 269) | func ExampleSortedStrArray_Len() {
  function ExampleSortedStrArray_Slice (line 280) | func ExampleSortedStrArray_Slice() {
  function ExampleSortedStrArray_Interfaces (line 289) | func ExampleSortedStrArray_Interfaces() {
  function ExampleSortedStrArray_Clone (line 299) | func ExampleSortedStrArray_Clone() {
  function ExampleSortedStrArray_Clear (line 311) | func ExampleSortedStrArray_Clear() {
  function ExampleSortedStrArray_Contains (line 324) | func ExampleSortedStrArray_Contains() {
  function ExampleSortedStrArray_ContainsI (line 337) | func ExampleSortedStrArray_ContainsI() {
  function ExampleSortedStrArray_Search (line 350) | func ExampleSortedStrArray_Search() {
  function ExampleSortedStrArray_Unique (line 365) | func ExampleSortedStrArray_Unique() {
  function ExampleSortedStrArray_LockFunc (line 376) | func ExampleSortedStrArray_LockFunc() {
  function ExampleSortedStrArray_RLockFunc (line 387) | func ExampleSortedStrArray_RLockFunc() {
  function ExampleSortedStrArray_Merge (line 400) | func ExampleSortedStrArray_Merge() {
  function ExampleSortedStrArray_Chunk (line 416) | func ExampleSortedStrArray_Chunk() {
  function ExampleSortedStrArray_Rands (line 425) | func ExampleSortedStrArray_Rands() {
  function ExampleSortedStrArray_Join (line 435) | func ExampleSortedStrArray_Join() {
  function ExampleSortedStrArray_CountValues (line 443) | func ExampleSortedStrArray_CountValues() {
  function ExampleSortedStrArray_Iterator (line 451) | func ExampleSortedStrArray_Iterator() {
  function ExampleSortedStrArray_IteratorAsc (line 464) | func ExampleSortedStrArray_IteratorAsc() {
  function ExampleSortedStrArray_IteratorDesc (line 477) | func ExampleSortedStrArray_IteratorDesc() {
  function ExampleSortedStrArray_String (line 490) | func ExampleSortedStrArray_String() {
  function ExampleSortedStrArray_MarshalJSON (line 498) | func ExampleSortedStrArray_MarshalJSON() {
  function ExampleSortedStrArray_UnmarshalJSON (line 517) | func ExampleSortedStrArray_UnmarshalJSON() {
  function ExampleSortedStrArray_UnmarshalValue (line 532) | func ExampleSortedStrArray_UnmarshalValue() {
  function ExampleSortedStrArray_Filter (line 556) | func ExampleSortedStrArray_Filter() {
  function ExampleSortedStrArray_FilterEmpty (line 568) | func ExampleSortedStrArray_FilterEmpty() {
  function ExampleSortedStrArray_IsEmpty (line 578) | func ExampleSortedStrArray_IsEmpty() {

FILE: container/garray/garray_z_example_sorted_t_test.go
  function ExampleSortedTArray_Walk (line 20) | func ExampleSortedTArray_Walk() {
  function ExampleNewSortedTArray (line 36) | func ExampleNewSortedTArray() {
  function ExampleNewSortedTArraySize (line 48) | func ExampleNewSortedTArraySize() {
  function ExampleNewSortedTArrayFromCopy (line 57) | func ExampleNewSortedTArrayFromCopy() {
  function ExampleSortedTArray_At (line 65) | func ExampleSortedTArray_At() {
  function ExampleSortedTArray_Get (line 77) | func ExampleSortedTArray_Get() {
  function ExampleSortedTArray_SetArray (line 88) | func ExampleSortedTArray_SetArray() {
  function ExampleSortedTArray_SetUnique (line 97) | func ExampleSortedTArray_SetUnique() {
  function ExampleSortedTArray_Sum (line 106) | func ExampleSortedTArray_Sum() {
  function ExampleSortedTArray_Sort (line 118) | func ExampleSortedTArray_Sort() {
  function ExampleSortedTArray_Remove (line 130) | func ExampleSortedTArray_Remove() {
  function ExampleSortedTArray_RemoveValue (line 142) | func ExampleSortedTArray_RemoveValue() {
  function ExampleSortedTArray_PopLeft (line 154) | func ExampleSortedTArray_PopLeft() {
  function ExampleSortedTArray_PopRight (line 166) | func ExampleSortedTArray_PopRight() {
  function ExampleSortedTArray_PopRights (line 180) | func ExampleSortedTArray_PopRights() {
  function ExampleSortedTArray_Rand (line 192) | func ExampleSortedTArray_Rand() {
  function ExampleSortedTArray_PopRands (line 204) | func ExampleSortedTArray_PopRands() {
  function ExampleSortedTArray_PopLefts (line 216) | func ExampleSortedTArray_PopLefts() {
  function ExampleSortedTArray_Range (line 228) | func ExampleSortedTArray_Range() {
  function ExampleSortedTArray_SubSlice (line 238) | func ExampleSortedTArray_SubSlice() {
  function ExampleSortedTArray_Add (line 250) | func ExampleSortedTArray_Add() {
  function ExampleSortedTArray_Append (line 259) | func ExampleSortedTArray_Append() {
  function ExampleSortedTArray_Len (line 271) | func ExampleSortedTArray_Len() {
  function ExampleSortedTArray_Slice (line 282) | func ExampleSortedTArray_Slice() {
  function ExampleSortedTArray_Interfaces (line 291) | func ExampleSortedTArray_Interfaces() {
  function ExampleSortedTArray_Clone (line 301) | func ExampleSortedTArray_Clone() {
  function ExampleSortedTArray_Clear (line 313) | func ExampleSortedTArray_Clear() {
  function ExampleSortedTArray_Contains (line 326) | func ExampleSortedTArray_Contains() {
  function ExampleSortedTArray_Search (line 339) | func ExampleSortedTArray_Search() {
  function ExampleSortedTArray_Unique (line 354) | func ExampleSortedTArray_Unique() {
  function ExampleSortedTArray_LockFunc (line 365) | func ExampleSortedTArray_LockFunc() {
  function ExampleSortedTArray_RLockFunc (line 376) | func ExampleSortedTArray_RLockFunc() {
  function ExampleSortedTArray_Merge (line 389) | func ExampleSortedTArray_Merge() {
  function ExampleSortedTArray_Chunk (line 405) | func ExampleSortedTArray_Chunk() {
  function ExampleSortedTArray_Rands (line 414) | func ExampleSortedTArray_Rands() {
  function ExampleSortedTArray_Join (line 424) | func ExampleSortedTArray_Join() {
  function ExampleSortedTArray_CountValues (line 432) | func ExampleSortedTArray_CountValues() {
  function ExampleSortedTArray_Iterator (line 440) | func ExampleSortedTArray_Iterator() {
  function ExampleSortedTArray_IteratorAsc (line 453) | func ExampleSortedTArray_IteratorAsc() {
  function ExampleSortedTArray_IteratorDesc (line 466) | func ExampleSortedTArray_IteratorDesc() {
  function ExampleSortedTArray_String (line 479) | func ExampleSortedTArray_String() {
  function ExampleSortedTArray_MarshalJSON (line 487) | func ExampleSortedTArray_MarshalJSON() {
  function ExampleSortedTArray_UnmarshalJSON (line 506) | func ExampleSortedTArray_UnmarshalJSON() {
  function ExampleSortedTArray_UnmarshalValue (line 521) | func ExampleSortedTArray_UnmarshalValue() {
  function ExampleSortedTArray_Filter (line 545) | func ExampleSortedTArray_Filter() {
  function ExampleSortedTArray_FilterEmpty (line 557) | func ExampleSortedTArray_FilterEmpty() {
  function ExampleSortedTArray_IsEmpty (line 567) | func ExampleSortedTArray_IsEmpty() {

FILE: container/garray/garray_z_unit_all_basic_test.go
  function Test_Array_Var (line 21) | func Test_Array_Var(t *testing.T) {
  function Test_SortedIntArray_Var (line 61) | func Test_SortedIntArray_Var(t *testing.T) {
  function Test_IntArray_Unique (line 70) | func Test_IntArray_Unique(t *testing.T) {
  function Test_SortedIntArray1 (line 80) | func Test_SortedIntArray1(t *testing.T) {
  function Test_SortedIntArray2 (line 92) | func Test_SortedIntArray2(t *testing.T) {
  function Test_SortedStrArray1 (line 103) | func Test_SortedStrArray1(t *testing.T) {
  function Test_SortedStrArray2 (line 118) | func Test_SortedStrArray2(t *testing.T) {
  function Test_SortedArray1 (line 131) | func Test_SortedArray1(t *testing.T) {
  function Test_SortedArray2 (line 144) | func Test_SortedArray2(t *testing.T) {
  function TestNewFromCopy (line 162) | func TestNewFromCopy(t *testing.T) {

FILE: container/garray/garray_z_unit_normal_any_test.go
  function Test_Array_Basic (line 23) | func Test_Array_Basic(t *testing.T) {
  function TestArray_Sort (line 103) | func TestArray_Sort(t *testing.T) {
  function TestArray_Unique (line 122) | func TestArray_Unique(t *testing.T) {
  function TestArray_PushAndPop (line 135) | func TestArray_PushAndPop(t *testing.T) {
  function TestArray_PopRands (line 163) | func TestArray_PopRands(t *testing.T) {
  function TestArray_PopLeft (line 171) | func TestArray_PopLeft(t *testing.T) {
  function TestArray_PopRight (line 189) | func TestArray_PopRight(t *testing.T) {
  function TestArray_PopLefts (line 210) | func TestArray_PopLefts(t *testing.T) {
  function TestArray_PopRights (line 220) | func TestArray_PopRights(t *testing.T) {
  function TestArray_PopLeftsAndPopRights (line 230) | func TestArray_PopLeftsAndPopRights(t *testing.T) {
  function TestArray_Range (line 265) | func TestArray_Range(t *testing.T) {
  function TestArray_Merge (line 279) | func TestArray_Merge(t *testing.T) {
  function TestArray_Fill (line 314) | func TestArray_Fill(t *testing.T) {
  function TestArray_Chunk (line 332) | func TestArray_Chunk(t *testing.T) {
  function TestArray_Pad (line 373) | func TestArray_Pad(t *testing.T) {
  function TestArray_SubSlice (line 383) | func TestArray_SubSlice(t *testing.T) {
  function TestArray_Rand (line 399) | func TestArray_Rand(t *testing.T) {
  function TestArray_Shuffle (line 433) | func TestArray_Shuffle(t *testing.T) {
  function TestArray_Reverse (line 441) | func TestArray_Reverse(t *testing.T) {
  function TestArray_Join (line 449) | func TestArray_Join(t *testing.T) {
  function TestArray_String (line 469) | func TestArray_String(t *testing.T) {
  function TestArray_Replace (line 479) | func TestArray_Replace(t *testing.T) {
  function TestArray_SetArray (line 498) | func TestArray_SetArray(t *testing.T) {
  function TestArray_Sum (line 511) | func TestArray_Sum(t *testing.T) {
  function TestArray_Clone (line 528) | func TestArray_Clone(t *testing.T) {
  function TestArray_CountValues (line 541) | func TestArray_CountValues(t *testing.T) {
  function TestArray_LockFunc (line 552) | func TestArray_LockFunc(t *testing.T) {
  function TestArray_RLockFunc (line 584) | func TestArray_RLockFunc(t *testing.T) {
  function TestArray_Json (line 616) | func TestArray_Json(t *testing.T) {
  function TestArray_Iterator (line 695) | func TestArray_Iterator(t *testing.T) {
  function TestArray_RemoveValue (line 742) | func TestArray_RemoveValue(t *testing.T) {
  function TestArray_RemoveValues (line 754) | func TestArray_RemoveValues(t *testing.T) {
  function TestArray_UnmarshalValue (line 763) | func TestArray_UnmarshalValue(t *testing.T) {
  function TestArray_FilterNil (line 792) | func TestArray_FilterNil(t *testing.T) {
  function TestArray_Filter (line 804) | func TestArray_Filter(t *testing.T) {
  function TestArray_FilterEmpty (line 834) | func TestArray_FilterEmpty(t *testing.T) {
  function TestArray_Walk (line 845) | func TestArray_Walk(t *testing.T) {

FILE: container/garray/garray_z_unit_normal_int_test.go
  function Test_IntArray_Basic (line 23) | func Test_IntArray_Basic(t *testing.T) {
  function TestIntArray_Sort (line 83) | func TestIntArray_Sort(t *testing.T) {
  function TestIntArray_Unique (line 101) | func TestIntArray_Unique(t *testing.T) {
  function TestIntArray_PushAndPop (line 111) | func TestIntArray_PushAndPop(t *testing.T) {
  function TestIntArray_PopLeftsAndPopRights (line 143) | func TestIntArray_PopLeftsAndPopRights(t *testing.T) {
  function TestIntArray_Range (line 182) | func TestIntArray_Range(t *testing.T) {
  function TestIntArray_Merge (line 196) | func TestIntArray_Merge(t *testing.T) {
  function TestIntArray_Fill (line 231) | func TestIntArray_Fill(t *testing.T) {
  function TestIntArray_PopLeft (line 248) | func TestIntArray_PopLeft(t *testing.T) {
  function TestIntArray_PopRight (line 266) | func TestIntArray_PopRight(t *testing.T) {
  function TestIntArray_PopLefts (line 287) | func TestIntArray_PopLefts(t *testing.T) {
  function TestIntArray_PopRights (line 297) | func TestIntArray_PopRights(t *testing.T) {
  function TestIntArray_Chunk (line 307) | func TestIntArray_Chunk(t *testing.T) {
  function TestIntArray_Pad (line 348) | func TestIntArray_Pad(t *testing.T) {
  function TestIntArray_SubSlice (line 358) | func TestIntArray_SubSlice(t *testing.T) {
  function TestIntArray_Rand (line 382) | func TestIntArray_Rand(t *testing.T) {
  function TestIntArray_PopRands (line 404) | func TestIntArray_PopRands(t *testing.T) {
  function TestIntArray_Shuffle (line 418) | func TestIntArray_Shuffle(t *testing.T) {
  function TestIntArray_Reverse (line 426) | func TestIntArray_Reverse(t *testing.T) {
  function TestIntArray_Join (line 434) | func TestIntArray_Join(t *testing.T) {
  function TestIntArray_String (line 442) | func TestIntArray_String(t *testing.T) {
  function TestIntArray_SetArray (line 452) | func TestIntArray_SetArray(t *testing.T) {
  function TestIntArray_Replace (line 463) | func TestIntArray_Replace(t *testing.T) {
  function TestIntArray_Clear (line 477) | func TestIntArray_Clear(t *testing.T) {
  function TestIntArray_Clone (line 486) | func TestIntArray_Clone(t *testing.T) {
  function TestArray_Get (line 495) | func TestArray_Get(t *testing.T) {
  function TestIntArray_Sum (line 506) | func TestIntArray_Sum(t *testing.T) {
  function TestIntArray_CountValues (line 514) | func TestIntArray_CountValues(t *testing.T) {
  function TestNewIntArrayFromCopy (line 525) | func TestNewIntArrayFromCopy(t *testing.T) {
  function TestIntArray_Remove (line 534) | func TestIntArray_Remove(t *testing.T) {
  function TestIntArray_LockFunc (line 555) | func TestIntArray_LockFunc(t *testing.T) {
  function TestIntArray_SortFunc (line 587) | func TestIntArray_SortFunc(t *testing.T) {
  function TestIntArray_RLockFunc (line 600) | func TestIntArray_RLockFunc(t *testing.T) {
  function TestIntArray_Json (line 632) | func TestIntArray_Json(t *testing.T) {
  function TestIntArray_Iterator (line 711) | func TestIntArray_Iterator(t *testing.T) {
  function TestIntArray_RemoveValue (line 758) | func TestIntArray_RemoveValue(t *testing.T) {
  function TestIntArray_RemoveValues (line 771) | func TestIntArray_RemoveValues(t *testing.T) {
  function TestIntArray_UnmarshalValue (line 780) | func TestIntArray_UnmarshalValue(t *testing.T) {
  function TestIntArray_Filter (line 809) | func TestIntArray_Filter(t *testing.T) {
  function TestIntArray_FilterEmpty (line 837) | func TestIntArray_FilterEmpty(t *testing.T) {
  function TestIntArray_Walk (line 848) | func TestIntArray_Walk(t *testing.T) {
  function TestIntArray_NewIntArrayRange (line 857) | func TestIntArray_NewIntArrayRange(t *testing.T) {

FILE: container/garray/garray_z_unit_normal_str_test.go
  function Test_StrArray_Basic (line 24) | func Test_StrArray_Basic(t *testing.T) {
  function TestStrArray_ContainsI (line 87) | func TestStrArray_ContainsI(t *testing.T) {
  function TestStrArray_Sort (line 98) | func TestStrArray_Sort(t *testing.T) {
  function TestStrArray_Unique (line 113) | func TestStrArray_Unique(t *testing.T) {
  function TestStrArray_PushAndPop (line 123) | func TestStrArray_PushAndPop(t *testing.T) {
  function TestStrArray_PopLeft (line 155) | func TestStrArray_PopLeft(t *testing.T) {
  function TestStrArray_PopRight (line 173) | func TestStrArray_PopRight(t *testing.T) {
  function TestStrArray_PopLefts (line 194) | func TestStrArray_PopLefts(t *testing.T) {
  function TestStrArray_PopRights (line 204) | func TestStrArray_PopRights(t *testing.T) {
  function TestStrArray_PopLeftsAndPopRights (line 214) | func TestStrArray_PopLeftsAndPopRights(t *testing.T) {
  function TestString_Range (line 249) | func TestString_Range(t *testing.T) {
  function TestStrArray_Merge (line 263) | func TestStrArray_Merge(t *testing.T) {
  function TestStrArray_Fill (line 298) | func TestStrArray_Fill(t *testing.T) {
  function TestStrArray_Chunk (line 313) | func TestStrArray_Chunk(t *testing.T) {
  function TestStrArray_Pad (line 354) | func TestStrArray_Pad(t *testing.T) {
  function TestStrArray_SubSlice (line 364) | func TestStrArray_SubSlice(t *testing.T) {
  function TestStrArray_Rand (line 380) | func TestStrArray_Rand(t *testing.T) {
  function TestStrArray_PopRands (line 400) | func TestStrArray_PopRands(t *testing.T) {
  function TestStrArray_Shuffle (line 412) | func TestStrArray_Shuffle(t *testing.T) {
  function TestStrArray_Reverse (line 420) | func TestStrArray_Reverse(t *testing.T) {
  function TestStrArray_Join (line 428) | func TestStrArray_Join(t *testing.T) {
  function TestStrArray_String (line 446) | func TestStrArray_String(t *testing.T) {
  function TestNewStrArrayFromCopy (line 457) | func TestNewStrArrayFromCopy(t *testing.T) {
  function TestStrArray_SetArray (line 468) | func TestStrArray_SetArray(t *testing.T) {
  function TestStrArray_Replace (line 483) | func TestStrArray_Replace(t *testing.T) {
  function TestStrArray_Sum (line 509) | func TestStrArray_Sum(t *testing.T) {
  function TestStrArray_PopRand (line 520) | func TestStrArray_PopRand(t *testing.T) {
  function TestStrArray_Clone (line 531) | func TestStrArray_Clone(t *testing.T) {
  function TestStrArray_CountValues (line 541) | func TestStrArray_CountValues(t *testing.T) {
  function TestStrArray_Remove (line 553) | func TestStrArray_Remove(t *testing.T) {
  function TestStrArray_RLockFunc (line 568) | func TestStrArray_RLockFunc(t *testing.T) {
  function TestStrArray_SortFunc (line 600) | func TestStrArray_SortFunc(t *testing.T) {
  function TestStrArray_LockFunc (line 612) | func TestStrArray_LockFunc(t *testing.T) {
  function TestStrArray_Json (line 644) | func TestStrArray_Json(t *testing.T) {
  function TestStrArray_Iterator (line 723) | func TestStrArray_Iterator(t *testing.T) {
  function TestStrArray_RemoveValue (line 770) | func TestStrArray_RemoveValue(t *testing.T) {
  function TestStrArray_RemoveValues (line 782) | func TestStrArray_RemoveValues(t *testing.T) {
  function TestStrArray_UnmarshalValue (line 791) | func TestStrArray_UnmarshalValue(t *testing.T) {
  function TestStrArray_Filter (line 819) | func TestStrArray_Filter(t *testing.T) {
  function TestStrArray_FilterEmpty (line 834) | func TestStrArray_FilterEmpty(t *testing.T) {
  function TestStrArray_Walk (line 845) | func TestStrArray_Walk(t *testing.T) {

FILE: container/garray/garray_z_unit_normal_t_test.go
  function Test_TArray_Basic (line 23) | func Test_TArray_Basic(t *testing.T) {
  function TestTArray_Sort (line 107) | func TestTArray_Sort(t *testing.T) {
  function TestTArray_Unique (line 126) | func TestTArray_Unique(t *testing.T) {
  function TestTArray_PushAndPop (line 139) | func TestTArray_PushAndPop(t *testing.T) {
  function TestTArray_PopRands (line 167) | func TestTArray_PopRands(t *testing.T) {
  function TestTArray_PopLeft (line 175) | func TestTArray_PopLeft(t *testing.T) {
  function TestTArray_PopRight (line 193) | func TestTArray_PopRight(t *testing.T) {
  function TestTArray_PopLefts (line 214) | func TestTArray_PopLefts(t *testing.T) {
  function TestTArray_PopRights (line 224) | func TestTArray_PopRights(t *testing.T) {
  function TestTArray_PopLeftsAndPopRights (line 234) | func TestTArray_PopLeftsAndPopRights(t *testing.T) {
  function TestTArray_Range (line 269) | func TestTArray_Range(t *testing.T) {
  function TestTArray_Merge (line 283) | func TestTArray_Merge(t *testing.T) {
  function TestTArray_Fill (line 318) | func TestTArray_Fill(t *testing.T) {
  function TestTArray_Chunk (line 336) | func TestTArray_Chunk(t *testing.T) {
  function TestTArray_Pad (line 377) | func TestTArray_Pad(t *testing.T) {
  function TestTArray_SubSlice (line 387) | func TestTArray_SubSlice(t *testing.T) {
  function TestTArray_Rand (line 403) | func TestTArray_Rand(t *testing.T) {
  function TestTArray_Shuffle (line 437) | func TestTArray_Shuffle(t *testing.T) {
  function TestTArray_Reverse (line 445) | func TestTArray_Reverse(t *testing.T) {
  function TestTArray_Join (line 453) | func TestTArray_Join(t *testing.T) {
  function TestTArray_String (line 473) | func TestTArray_String(t *testing.T) {
  function TestTArray_Replace (line 483) | func TestTArray_Replace(t *testing.T) {
  function TestTArray_SetArray (line 502) | func TestTArray_SetArray(t *testing.T) {
  function TestTArray_Sum (line 515) | func TestTArray_Sum(t *testing.T) {
  function TestTArray_Clone (line 532) | func TestTArray_Clone(t *testing.T) {
  function TestTArray_CountValues (line 545) | func TestTArray_CountValues(t *testing.T) {
  function TestTArray_LockFunc (line 556) | func TestTArray_LockFunc(t *testing.T) {
  function TestTArray_RLockFunc (line 588) | func TestTArray_RLockFunc(t *testing.T) {
  function TestTArray_Json (line 620) | func TestTArray_Json(t *testing.T) {
  function TestTArray_Iterator (line 699) | func TestTArray_Iterator(t *testing.T) {
  function TestTArray_RemoveValue (line 746) | func TestTArray_RemoveValue(t *testing.T) {
  function TestTArray_RemoveValues (line 758) | func TestTArray_RemoveValues(t *testing.T) {
  function TestTArray_UnmarshalValue (line 767) | func TestTArray_UnmarshalValue(t *testing.T) {
  function TestTArray_FilterNil (line 796) | func TestTArray_FilterNil(t *testing.T) {
  function TestTArray_Filter (line 808) | func TestTArray_Filter(t *testing.T) {
  function TestTArray_FilterEmpty (line 838) | func TestTArray_FilterEmpty(t *testing.T) {
  function TestTArray_Walk (line 849) | func TestTArray_Walk(t *testing.T) {

FILE: container/garray/garray_z_unit_sorted_any_test.go
  function TestSortedArray_NewSortedArrayFrom (line 25) | func TestSortedArray_NewSortedArrayFrom(t *testing.T) {
  function TestNewSortedArrayFromCopy (line 46) | func TestNewSortedArrayFromCopy(t *testing.T) {
  function TestNewSortedArrayRange (line 65) | func TestNewSortedArrayRange(t *testing.T) {
  function TestSortedArray_SetArray (line 77) | func TestSortedArray_SetArray(t *testing.T) {
  function TestSortedArray_Sort (line 94) | func TestSortedArray_Sort(t *testing.T) {
  function TestSortedArray_Get (line 108) | func TestSortedArray_Get(t *testing.T) {
  function TestSortedArray_At (line 130) | func TestSortedArray_At(t *testing.T) {
  function TestSortedArray_Remove (line 142) | func TestSortedArray_Remove(t *testing.T) {
  function TestSortedArray_PopLeft (line 178) | func TestSortedArray_PopLeft(t *testing.T) {
  function TestSortedArray_PopRight (line 207) | func TestSortedArray_PopRight(t *testing.T) {
  function TestSortedArray_PopRand (line 238) | func TestSortedArray_PopRand(t *testing.T) {
  function TestSortedArray_PopRands (line 253) | func TestSortedArray_PopRands(t *testing.T) {
  function TestSortedArray_Empty (line 273) | func TestSortedArray_Empty(t *testing.T) {
  function TestSortedArray_PopLefts (line 293) | func TestSortedArray_PopLefts(t *testing.T) {
  function TestSortedArray_PopRights (line 312) | func TestSortedArray_PopRights(t *testing.T) {
  function TestSortedArray_Range (line 330) | func TestSortedArray_Range(t *testing.T) {
  function TestSortedArray_Sum (line 356) | func TestSortedArray_Sum(t *testing.T) {
  function TestSortedArray_Clone (line 374) | func TestSortedArray_Clone(t *testing.T) {
  function TestSortedArray_Clear (line 390) | func TestSortedArray_Clear(t *testing.T) {
  function TestSortedArray_Chunk (line 405) | func TestSortedArray_Chunk(t *testing.T) {
  function TestSortedArray_SubSlice (line 451) | func TestSortedArray_SubSlice(t *testing.T) {
  function TestSortedArray_Rand (line 481) | func TestSortedArray_Rand(t *testing.T) {
  function TestSortedArray_Rands (line 501) | func TestSortedArray_Rands(t *testing.T) {
  function TestSortedArray_Join (line 523) | func TestSortedArray_Join(t *testing.T) {
  function TestSortedArray_String (line 547) | func TestSortedArray_String(t *testing.T) {
  function TestSortedArray_CountValues (line 558) | func TestSortedArray_CountValues(t *testing.T) {
  function TestSortedArray_SetUnique (line 574) | func TestSortedArray_SetUnique(t *testing.T) {
  function TestSortedArray_Unique (line 584) | func TestSortedArray_Unique(t *testing.T) {
  function TestSortedArray_LockFunc (line 599) | func TestSortedArray_LockFunc(t *testing.T) {
  function TestSortedArray_RLockFunc (line 634) | func TestSortedArray_RLockFunc(t *testing.T) {
  function TestSortedArray_Merge (line 669) | func TestSortedArray_Merge(t *testing.T) {
  function TestSortedArray_Json (line 699) | func TestSortedArray_Json(t *testing.T) {
  function TestSortedArray_Iterator (line 816) | func TestSortedArray_Iterator(t *testing.T) {
  function TestSortedArray_RemoveValue (line 863) | func TestSortedArray_RemoveValue(t *testing.T) {
  function TestSortedArray_RemoveValues (line 875) | func TestSortedArray_RemoveValues(t *testing.T) {
  function TestSortedArray_UnmarshalValue (line 884) | func TestSortedArray_UnmarshalValue(t *testing.T) {
  function TestSortedArray_Filter (line 912) | func TestSortedArray_Filter(t *testing.T) {
  function TestSortedArray_FilterNil (line 940) | func TestSortedArray_FilterNil(t *testing.T) {
  function TestSortedArray_FilterEmpty (line 952) | func TestSortedArray_FilterEmpty(t *testing.T) {
  function TestSortedArray_Walk (line 968) | func TestSortedArray_Walk(t *testing.T) {
  function TestSortedArray_IsEmpty (line 977) | func TestSortedArray_IsEmpty(t *testing.T) {
  function TestSortedArray_DeepCopy (line 984) | func TestSortedArray_DeepCopy(t *testing.T) {

FILE: container/garray/garray_z_unit_sorted_int_test.go
  function TestNewSortedIntArrayComparator (line 23) | func TestNewSortedIntArrayComparator(t *testing.T) {
  function TestNewSortedIntArrayRange (line 35) | func TestNewSortedIntArrayRange(t *testing.T) {
  function TestNewSortedIntArrayFrom (line 43) | func TestNewSortedIntArrayFrom(t *testing.T) {
  function TestNewSortedIntArrayFromCopy (line 53) | func TestNewSortedIntArrayFromCopy(t *testing.T) {
  function TestSortedIntArray_At (line 61) | func TestSortedIntArray_At(t *testing.T) {
  function TestSortedIntArray_SetArray (line 72) | func TestSortedIntArray_SetArray(t *testing.T) {
  function TestSortedIntArray_Sort (line 86) | func TestSortedIntArray_Sort(t *testing.T) {
  function TestSortedIntArray_Get (line 98) | func TestSortedIntArray_Get(t *testing.T) {
  function TestSortedIntArray_Remove (line 120) | func TestSortedIntArray_Remove(t *testing.T) {
  function TestSortedIntArray_PopLeft (line 161) | func TestSortedIntArray_PopLeft(t *testing.T) {
  function TestSortedIntArray_PopRight (line 188) | func TestSortedIntArray_PopRight(t *testing.T) {
  function TestSortedIntArray_PopRand (line 217) | func TestSortedIntArray_PopRand(t *testing.T) {
  function TestSortedIntArray_PopRands (line 229) | func TestSortedIntArray_PopRands(t *testing.T) {
  function TestSortedIntArray_Empty (line 246) | func TestSortedIntArray_Empty(t *testing.T) {
  function TestSortedIntArray_PopLefts (line 266) | func TestSortedIntArray_PopLefts(t *testing.T) {
  function TestSortedIntArray_PopRights (line 282) | func TestSortedIntArray_PopRights(t *testing.T) {
  function TestSortedIntArray_Range (line 298) | func TestSortedIntArray_Range(t *testing.T) {
  function TestSortedIntArray_Sum (line 319) | func TestSortedIntArray_Sum(t *testing.T) {
  function TestSortedIntArray_Join (line 328) | func TestSortedIntArray_Join(t *testing.T) {
  function TestSortedIntArray_String (line 339) | func TestSortedIntArray_String(t *testing.T) {
  function TestSortedIntArray_Contains (line 350) | func TestSortedIntArray_Contains(t *testing.T) {
  function TestSortedIntArray_Clone (line 358) | func TestSortedIntArray_Clone(t *testing.T) {
  function TestSortedIntArray_Clear (line 368) | func TestSortedIntArray_Clear(t *testing.T) {
  function TestSortedIntArray_Chunk (line 377) | func TestSortedIntArray_Chunk(t *testing.T) {
  function TestSortedIntArray_SubSlice (line 418) | func TestSortedIntArray_SubSlice(t *testing.T) {
  function TestSortedIntArray_Rand (line 444) | func TestSortedIntArray_Rand(t *testing.T) {
  function TestSortedIntArray_Rands (line 459) | func TestSortedIntArray_Rands(t *testing.T) {
  function TestSortedIntArray_CountValues (line 476) | func TestSortedIntArray_CountValues(t *testing.T) {
  function TestSortedIntArray_SetUnique (line 487) | func TestSortedIntArray_SetUnique(t *testing.T) {
  function TestSortedIntArray_Unique (line 497) | func TestSortedIntArray_Unique(t *testing.T) {
  function TestSortedIntArray_LockFunc (line 511) | func TestSortedIntArray_LockFunc(t *testing.T) {
  function TestSortedIntArray_RLockFunc (line 542) | func TestSortedIntArray_RLockFunc(t *testing.T) {
  function TestSortedIntArray_Merge (line 574) | func TestSortedIntArray_Merge(t *testing.T) {
  function TestSortedIntArray_Json (line 602) | func TestSortedIntArray_Json(t *testing.T) {
  function TestSortedIntArray_Iterator (line 683) | func TestSortedIntArray_Iterator(t *testing.T) {
  function TestSortedIntArray_RemoveValue (line 730) | func TestSortedIntArray_RemoveValue(t *testing.T) {
  function TestSortedIntArray_RemoveValues (line 743) | func TestSortedIntArray_RemoveValues(t *testing.T) {
  function TestSortedIntArray_UnmarshalValue (line 752) | func TestSortedIntArray_UnmarshalValue(t *testing.T) {
  function TestSortedIntArray_Filter (line 780) | func TestSortedIntArray_Filter(t *testing.T) {
  function TestSortedIntArray_FilterEmpty (line 795) | func TestSortedIntArray_FilterEmpty(t *testing.T) {
  function TestSortedIntArray_Walk (line 820) | func TestSortedIntArray_Walk(t *testing.T) {
  function TestSortedIntArray_IsEmpty (line 829) | func TestSortedIntArray_IsEmpty(t *testing.T) {
  function TestSortedIntArray_DeepCopy (line 836) | func TestSortedIntArray_DeepCopy(t *testing.T) {

FILE: container/garray/garray_z_unit_sorted_str_test.go
  function TestNewSortedStrArrayComparator (line 24) | func TestNewSortedStrArrayComparator(t *testing.T) {
  function TestNewSortedStrArrayFrom (line 36) | func TestNewSortedStrArrayFrom(t *testing.T) {
  function TestNewSortedStrArrayFromCopy (line 46) | func TestNewSortedStrArrayFromCopy(t *testing.T) {
  function TestSortedStrArray_SetArray (line 55) | func TestSortedStrArray_SetArray(t *testing.T) {
  function TestSortedStrArray_ContainsI (line 68) | func TestSortedStrArray_ContainsI(t *testing.T) {
  function TestSortedStrArray_Sort (line 81) | func TestSortedStrArray_Sort(t *testing.T) {
  function TestSortedStrArray_Get (line 94) | func TestSortedStrArray_Get(t *testing.T) {
  function TestSortedStrArray_Remove (line 112) | func TestSortedStrArray_Remove(t *testing.T) {
  function TestSortedStrArray_PopLeft (line 151) | func TestSortedStrArray_PopLeft(t *testing.T) {
  function TestSortedStrArray_PopRight (line 178) | func TestSortedStrArray_PopRight(t *testing.T) {
  function TestSortedStrArray_PopRand (line 207) | func TestSortedStrArray_PopRand(t *testing.T) {
  function TestSortedStrArray_PopRands (line 219) | func TestSortedStrArray_PopRands(t *testing.T) {
  function TestSortedStrArray_Empty (line 234) | func TestSortedStrArray_Empty(t *testing.T) {
  function TestSortedStrArray_PopLefts (line 254) | func TestSortedStrArray_PopLefts(t *testing.T) {
  function TestSortedStrArray_PopRights (line 270) | func TestSortedStrArray_PopRights(t *testing.T) {
  function TestSortedStrArray_Range (line 285) | func TestSortedStrArray_Range(t *testing.T) {
  function TestSortedStrArray_Sum (line 309) | func TestSortedStrArray_Sum(t *testing.T) {
  function TestSortedStrArray_Clone (line 320) | func TestSortedStrArray_Clone(t *testing.T) {
  function TestSortedStrArray_Clear (line 331) | func TestSortedStrArray_Clear(t *testing.T) {
  function TestSortedStrArray_SubSlice (line 340) | func TestSortedStrArray_SubSlice(t *testing.T) {
  function TestSortedStrArray_Len (line 369) | func TestSortedStrArray_Len(t *testing.T) {
  function TestSortedStrArray_Rand (line 378) | func TestSortedStrArray_Rand(t *testing.T) {
  function TestSortedStrArray_Rands (line 393) | func TestSortedStrArray_Rands(t *testing.T) {
  function TestSortedStrArray_Join (line 411) | func TestSortedStrArray_Join(t *testing.T) {
  function TestSortedStrArray_String (line 431) | func TestSortedStrArray_String(t *testing.T) {
  function TestSortedStrArray_CountValues (line 442) | func TestSortedStrArray_CountValues(t *testing.T) {
  function TestSortedStrArray_Chunk (line 453) | func TestSortedStrArray_Chunk(t *testing.T) {
  function TestSortedStrArray_SetUnique (line 493) | func TestSortedStrArray_SetUnique(t *testing.T) {
  function TestSortedStrArray_Unique (line 503) | func TestSortedStrArray_Unique(t *testing.T) {
  function TestSortedStrArray_LockFunc (line 518) | func TestSortedStrArray_LockFunc(t *testing.T) {
  function TestSortedStrArray_RLockFunc (line 550) | func TestSortedStrArray_RLockFunc(t *testing.T) {
  function TestSortedStrArray_Merge (line 582) | func TestSortedStrArray_Merge(t *testing.T) {
  function TestSortedStrArray_Json (line 611) | func TestSortedStrArray_Json(t *testing.T) {
  function TestSortedStrArray_Iterator (line 696) | func TestSortedStrArray_Iterator(t *testing.T) {
  function TestSortedStrArray_RemoveValue (line 743) | func TestSortedStrArray_RemoveValue(t *testing.T) {
  function TestSortedStrArray_RemoveValues (line 755) | func TestSortedStrArray_RemoveValues(t *testing.T) {
  function TestSortedStrArray_UnmarshalValue (line 764) | func TestSortedStrArray_UnmarshalValue(t *testing.T) {
  function TestSortedStrArray_Filter (line 792) | func TestSortedStrArray_Filter(t *testing.T) {
  function TestSortedStrArray_FilterEmpty (line 807) | func TestSortedStrArray_FilterEmpty(t *testing.T) {
  function TestSortedStrArray_Walk (line 832) | func TestSortedStrArray_Walk(t *testing.T) {
  function TestSortedStrArray_DeepCopy (line 841) | func TestSortedStrArray_DeepCopy(t *testing.T) {

FILE: container/garray/garray_z_unit_sorted_t_test.go
  function TestSortedTArray_NewSortedTArrayFrom (line 25) | func TestSortedTArray_NewSortedTArrayFrom(t *testing.T) {
  function TestNewSortedTArrayFromCopy (line 46) | func TestNewSortedTArrayFromCopy(t *testing.T) {
  function TestSortedTArray_SetArray (line 65) | func TestSortedTArray_SetArray(t *testing.T) {
  function TestSortedTArray_Sort (line 82) | func TestSortedTArray_Sort(t *testing.T) {
  function TestSortedTArray_Get (line 93) | func TestSortedTArray_Get(t *testing.T) {
  function TestSortedTArray_At (line 112) | func TestSortedTArray_At(t *testing.T) {
  function TestSortedTArray_Remove (line 121) | func TestSortedTArray_Remove(t *testing.T) {
  function TestSortedTArray_PopLeft (line 154) | func TestSortedTArray_PopLeft(t *testing.T) {
  function TestSortedTArray_PopRight (line 183) | func TestSortedTArray_PopRight(t *testing.T) {
  function TestSortedTArray_PopRand (line 214) | func TestSortedTArray_PopRand(t *testing.T) {
  function TestSortedTArray_PopRands (line 226) | func TestSortedTArray_PopRands(t *testing.T) {
  function TestSortedTArray_Empty (line 243) | func TestSortedTArray_Empty(t *testing.T) {
  function TestSortedTArray_PopLefts (line 263) | func TestSortedTArray_PopLefts(t *testing.T) {
  function TestSortedTArray_PopRights (line 279) | func TestSortedTArray_PopRights(t *testing.T) {
  function TestSortedTArray_Range (line 294) | func TestSortedTArray_Range(t *testing.T) {
  function TestSortedTArray_Sum (line 317) | func TestSortedTArray_Sum(t *testing.T) {
  function TestSortedTArray_Clone (line 332) | func TestSortedTArray_Clone(t *testing.T) {
  function TestSortedTArray_Clear (line 345) | func TestSortedTArray_Clear(t *testing.T) {
  function TestSortedTArray_Chunk (line 357) | func TestSortedTArray_Chunk(t *testing.T) {
  function TestSortedTArray_SubSlice (line 400) | func TestSortedTArray_SubSlice(t *testing.T) {
  function TestSortedTArray_Rand (line 427) | func TestSortedTArray_Rand(t *testing.T) {
  function TestSortedTArray_Rands (line 444) | func TestSortedTArray_Rands(t *testing.T) {
  function TestSortedTArray_Join (line 463) | func TestSortedTArray_Join(t *testing.T) {
  function TestSortedTArray_String (line 484) | func TestSortedTArray_String(t *testing.T) {
  function TestSortedTArray_CountValues (line 495) | func TestSortedTArray_CountValues(t *testing.T) {
  function TestSortedTArray_SetUnique (line 508) | func TestSortedTArray_SetUnique(t *testing.T) {
  function TestSortedTArray_Unique (line 518) | func TestSortedTArray_Unique(t *testing.T) {
  function TestSortedTArray_LockFunc (line 533) | func TestSortedTArray_LockFunc(t *testing.T) {
  function TestSortedTArray_RLockFunc (line 565) | func TestSortedTArray_RLockFunc(t *testing.T) {
  function TestSortedTArray_Merge (line 597) | func TestSortedTArray_Merge(t *testing.T) {
  function TestSortedTArray_Json (line 621) | func TestSortedTArray_Json(t *testing.T) {
  function TestSortedTArray_Iterator (line 740) | func TestSortedTArray_Iterator(t *testing.T) {
  function TestSortedTArray_RemoveValue (line 787) | func TestSortedTArray_RemoveValue(t *testing.T) {
  function TestSortedTArray_RemoveValues (line 799) | func TestSortedTArray_RemoveValues(t *testing.T) {
  function TestSortedTArray_UnmarshalValue (line 808) | func TestSortedTArray_UnmarshalValue(t *testing.T) {
  function TestSortedTArray_Filter (line 836) | func TestSortedTArray_Filter(t *testing.T) {
  function TestSortedTArray_FilterNil (line 864) | func TestSortedTArray_FilterNil(t *testing.T) {
  function TestSortedTArray_FilterEmpty (line 878) | func TestSortedTArray_FilterEmpty(t *testing.T) {
  function TestSortedTArray_Walk (line 898) | func TestSortedTArray_Walk(t *testing.T) {
  function TestSortedTArray_IsEmpty (line 907) | func TestSortedTArray_IsEmpty(t *testing.T) {
  function TestSortedTArray_DeepCopy (line 914) | func TestSortedTArray_DeepCopy(t *testing.T) {

FILE: container/glist/glist.go
  type List (line 25) | type List struct
    method PushFront (line 56) | func (l *List) PushFront(v any) (e *Element) {
    method PushBack (line 67) | func (l *List) PushBack(v any) (e *Element) {
    method PushFronts (line 78) | func (l *List) PushFronts(values []any) {
    method PushBacks (line 90) | func (l *List) PushBacks(values []any) {
    method PopBack (line 102) | func (l *List) PopBack() (value any) {
    method PopFront (line 116) | func (l *List) PopFront() (value any) {
    method PopBacks (line 131) | func (l *List) PopBacks(max int) (values []any) {
    method PopFronts (line 153) | func (l *List) PopFronts(max int) (values []any) {
    method PopBackAll (line 175) | func (l *List) PopBackAll() []any {
    method PopFrontAll (line 181) | func (l *List) PopFrontAll() []any {
    method FrontAll (line 186) | func (l *List) FrontAll() (values []any) {
    method BackAll (line 203) | func (l *List) BackAll() (values []any) {
    method FrontValue (line 220) | func (l *L
Copy disabled (too large) Download .json
Condensed preview — 2095 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,988K chars).
[
  {
    "path": ".codecov.yml",
    "chars": 60,
    "preview": "ignore:\n  - \"cmd\"  # ignore cmd folders and all its contents"
  },
  {
    "path": ".gitattributes",
    "chars": 80,
    "preview": "*.js linguist-language=GO\n*.css linguist-language=GO\n*.html linguist-language=GO"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE",
    "chars": 529,
    "preview": "<!-- 为高效处理您的疑问,如果觉得是BUG类问题,请您务必提供可复现该问题的最小可运行代码! -->\n<!-- 为高效处理您的疑问,如果觉得是BUG类问题,请您务必提供可复现该问题的最小可运行代码! -->\n<!-- 为高效处理您的疑问"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 655,
    "preview": "# These are supported funding model platforms\n\ngithub: [gogf] # Replace with up to 4 GitHub Sponsors-enabled usernames e"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/00-bug.yml",
    "chars": 2382,
    "preview": "# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/01-enhance.yml",
    "chars": 1051,
    "preview": "# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/02-feature.yml",
    "chars": 1383,
    "preview": "# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/03-question.yml",
    "chars": 847,
    "preview": "# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.MD",
    "chars": 2866,
    "preview": "**Please ensure you adhere to every item in this list.**\n+ The PR title is formatted as follows: `<type>[optional scope]"
  },
  {
    "path": ".github/workflows/apollo/docker-compose.yml",
    "chars": 1017,
    "preview": "version: '2'\n\nservices:\n  apollo-quick-start:\n    image: \"loads/apollo-quick-start:latest\"\n    container_name: apollo-qu"
  },
  {
    "path": ".github/workflows/apollo/sql/apolloconfigdb.sql",
    "chars": 25424,
    "preview": "--\n-- Copyright 2022 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
  },
  {
    "path": ".github/workflows/apollo/sql/apolloportaldb.sql",
    "chars": 19645,
    "preview": "--\n-- Copyright 2022 Apollo Authors\n--\n-- Licensed under the Apache License, Version 2.0 (the \"License\");\n-- you may not"
  },
  {
    "path": ".github/workflows/ci-main.yml",
    "chars": 8991,
    "preview": "# The main codes build and unit testing running workflow.\nname: GoFrame Main CI\n\n\non:\n  push:\n    branches:\n    - master"
  },
  {
    "path": ".github/workflows/ci-sub.yml",
    "chars": 1717,
    "preview": "# The sub codes build and unit testing running workflow.\n# It maintains the ci of unimportant packages.\nname: GoFrame Su"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "chars": 4709,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".github/workflows/consul/client.json",
    "chars": 119,
    "preview": "{\n    \"node_name\": \"consul-client\",\n    \"data_dir\": \"/consul/data\",\n    \"retry_join\":[\n        \"consul-server\"\n     ]\n}"
  },
  {
    "path": ".github/workflows/consul/docker-compose.yml",
    "chars": 562,
    "preview": "version: '3.7'\n\nservices:\n\n  consul-server:\n    image: consul:1.15\n    container_name: consul-server\n    restart: always"
  },
  {
    "path": ".github/workflows/consul/server.json",
    "chars": 216,
    "preview": "{\n    \"node_name\": \"consul-server\",\n    \"server\": true,\n    \"bootstrap\" : true,\n    \"ui_config\": {\n        \"enabled\" : t"
  },
  {
    "path": ".github/workflows/format-code-on-push.yml",
    "chars": 1861,
    "preview": "name: Format Code on Push\n\non:\n  push\n\njobs:\n  format-code:\n    strategy:\n      matrix:\n        go-version: [ 'stable' ]"
  },
  {
    "path": ".github/workflows/gitee-sync.yml",
    "chars": 632,
    "preview": "on:\n  push:\n    branches:\n      - master\n    tags:\n      - \"*\"\n\nname: Sync to Gitee\njobs:\n  run:\n    name: Run\n    runs-"
  },
  {
    "path": ".github/workflows/golangci-lint.yml",
    "chars": 1313,
    "preview": "# Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n#\n# This Source Code Form is subject to the terms "
  },
  {
    "path": ".github/workflows/issue-check-inactive.yml",
    "chars": 897,
    "preview": "# Rule description: Execute the ISSUE once a day at 3 a.m. (GMT+8) and set the non-bug issue that has not been active in"
  },
  {
    "path": ".github/workflows/issue-close-inactive.yml",
    "chars": 704,
    "preview": "# RULE DESCRIPTION: EXECUTED ONCE A DAY AT 4 A.M. (GMT+8) TO CLOSE NON-BUG ISSUES THAT HAVE NOT BEEN ACTIVE IN THE LAST "
  },
  {
    "path": ".github/workflows/issue-labeled.yml",
    "chars": 1030,
    "preview": "## Rule description: Add comments when an issue is marked as help wanted\n\nname: Issue Labeled\n\non:\n  issues:\n    types: "
  },
  {
    "path": ".github/workflows/issue-remove-inactive.yml",
    "chars": 929,
    "preview": "# Rule description: If an issue author updates or comments on an issue while it is not active and has not been closed, t"
  },
  {
    "path": ".github/workflows/issue-remove-need-more-details.yml",
    "chars": 1005,
    "preview": "# Rule Description: For issues that need more details and are not yet closed, remove the \"need more details\" tag after t"
  },
  {
    "path": ".github/workflows/issue-translator.yml",
    "chars": 691,
    "preview": "# https://github.com/usthe/issues-translate-action\nname: 'Issue Translator'\non:\n  issue_comment:\n    types: [created]\n  "
  },
  {
    "path": ".github/workflows/nacos/docker-compose.yml",
    "chars": 614,
    "preview": "version: \"3.8\"\n\nservices:\n  nacos:\n    image: nacos/nacos-server:v2.1.2\n    container_name: nacos\n    env_file:\n      - "
  },
  {
    "path": ".github/workflows/nacos/env/nacos.env",
    "chars": 42,
    "preview": "PREFER_HOST_MODE=hostname\nMODE=standalone\n"
  },
  {
    "path": ".github/workflows/redis/docker-compose.yml",
    "chars": 2149,
    "preview": "version: \"2\"\n\nservices:\n  redis-master:\n    container_name: redis-master\n    image: \"loads/redis:7.0-sentinel\"\n    envir"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 1761,
    "preview": "name: GoFrame Release\n\non:\n  push:\n    # Sequence of patterns matched against refs/tags\n    tags:\n    - 'v*' # Push even"
  },
  {
    "path": ".github/workflows/scorecard.yml",
    "chars": 3343,
    "preview": "# This workflow uses actions that are not certified by GitHub. They are provided\n# by a third-party and are governed by "
  },
  {
    "path": ".github/workflows/scripts/before_script.sh",
    "chars": 1002,
    "preview": "#!/usr/bin/env bash\n\n# Install gci\necho \"Installing gci...\"\ngo install github.com/daixiang0/gci@latest\n\n# Check if the G"
  },
  {
    "path": ".github/workflows/scripts/ci-main-clean.sh",
    "chars": 16997,
    "preview": "#!/usr/bin/env bash\n\ndirpath=$1\n\n# Extract the base directory name for pattern matching\nif [ -n \"$dirpath\" ]; then\n    d"
  },
  {
    "path": ".github/workflows/scripts/ci-main.sh",
    "chars": 1815,
    "preview": "#!/usr/bin/env bash\n\ncoverage=$1\n\n# find all path that contains go.mod.\nfor file in `find . -name go.mod`; do\n    dirpat"
  },
  {
    "path": ".github/workflows/scripts/ci-sub.sh",
    "chars": 2621,
    "preview": "#!/usr/bin/env bash\n\ncoverage=$1\n\n# update code of submodules\ngit clone https://github.com/gogf/examples\n\n# update go.mo"
  },
  {
    "path": ".github/workflows/scripts/docker-services.sh",
    "chars": 23770,
    "preview": "#!/usr/bin/env bash\n#\n# GoFrame Docker Services Manager\n# For managing Docker services used in local development and tes"
  },
  {
    "path": ".github/workflows/scripts/replace_examples_gomod.sh",
    "chars": 2634,
    "preview": "#!/usr/bin/env bash\n\n# Get the absolute path to the repository root\nrepo_root=$(pwd)\nworkdir=$repo_root/examples\n\necho \""
  },
  {
    "path": ".github/workflows/scripts/update_version.sh",
    "chars": 1443,
    "preview": "#!/usr/bin/env bash\n\n# Check if the number of parameters is 2\nif [ $# -ne 2 ]; then\n    echo \"Invalid parameters, please"
  },
  {
    "path": ".github/workflows/tag.yml",
    "chars": 2093,
    "preview": "name: GoFrame AutoCreating SubMod Tags\n\non:\n  push:\n    # Sequence of patterns matched against refs/tags\n    tags:\n     "
  },
  {
    "path": ".gitignore",
    "chars": 280,
    "preview": ".buildpath\n.hgignore.swp\n.project\n.orig\n.swp\n.idea/\n.settings/\n.vscode/\nvendor/\nbin/\n**/.DS_Store\n.test/\ncmd/gf/main\ncmd"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".golangci.yml",
    "chars": 5697,
    "preview": "version: \"2\"\nrun:\n  concurrency: 4\n  modules-download-mode: readonly\n  issues-exit-code: 2\n  tests: false\n  allow-parall"
  },
  {
    "path": ".make_tidy.sh",
    "chars": 1111,
    "preview": "#!/usr/bin/env bash\n\n# Function to run sed in-place with OS-specific options\nsed_replace() {\n    if [[ \"$OSTYPE\" == \"dar"
  },
  {
    "path": ".make_version.sh",
    "chars": 4168,
    "preview": "#!/usr/bin/env bash\n\n# Function to run sed in-place with OS-specific options\nsed_replace() {\n    if [[ \"$OSTYPE\" == \"dar"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 682,
    "preview": "# Contributing\n\nThanks for taking the time to join our community and start contributing!\n\n## With issues\n\n- Use the sear"
  },
  {
    "path": "LICENSE",
    "chars": 1089,
    "preview": "MIT License\n\nCopyright (c) 2017 GoFrame Team https://goframe.org\n\nPermission is hereby granted, free of charge, to any p"
  },
  {
    "path": "Makefile",
    "chars": 1731,
    "preview": "SHELL := /bin/bash\n\n# execute \"go mod tidy\" on all folders that have go.mod file\n.PHONY: tidy\ntidy:\n\t./.make_tidy.sh\n\n# "
  },
  {
    "path": "README.MD",
    "chars": 3135,
    "preview": "English | [简体中文](README.zh_CN.MD)\n\n<div align=center>\n<img src=\"https://goframe.org/img/logo_full.png\" width=\"300\" alt=\""
  },
  {
    "path": "README.zh_CN.MD",
    "chars": 2915,
    "preview": "[English](README.MD) | 简体中文\n\n<div align=center>\n<img src=\"https://goframe.org/img/logo_full.png\" width=\"300\" alt=\"gofram"
  },
  {
    "path": "cmd/gf/LICENSE",
    "chars": 1092,
    "preview": "MIT License\n\nCopyright (c) 2018 john@goframe.org https://goframe.org\n\nPermission is hereby granted, free of charge, to a"
  },
  {
    "path": "cmd/gf/Makefile",
    "chars": 1347,
    "preview": ".DEFAULT_GOAL := pack\n\npack: pack.template-single pack.template-mono pack.template-mono-app\n\npack.template-single:\n\t@rm "
  },
  {
    "path": "cmd/gf/README.MD",
    "chars": 4766,
    "preview": "English | [简体中文](README.zh_CN.MD)\n\n# gf\n\n`gf` is a powerful CLI tool for building [GoFrame](https://goframe.org) applica"
  },
  {
    "path": "cmd/gf/README.zh_CN.MD",
    "chars": 3730,
    "preview": "[English](README.MD) | 简体中文\n\n# gf\n\n`gf` 是一个强大的 CLI 工具,用于便捷地构建 [GoFrame](https://goframe.org) 应用程序。\n\n## 1. 安装\n\n## 1) 预编译二"
  },
  {
    "path": "cmd/gf/gfcmd/gfcmd.go",
    "chars": 2880,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/go.mod",
    "chars": 2949,
    "preview": "module github.com/gogf/gf/cmd/gf/v2\n\ngo 1.23.0\n\nrequire (\n\tgithub.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.10.0\n\tgit"
  },
  {
    "path": "cmd/gf/go.sum",
    "chars": 22963,
    "preview": "aead.dev/minisign v0.2.0 h1:kAWrq/hBRu4AARY6AlciO83xhNnW9UaC8YipS2uhLPk=\naead.dev/minisign v0.2.0/go.mod h1:zdq6LdSd9Tbu"
  },
  {
    "path": "cmd/gf/go.work",
    "chars": 1177,
    "preview": "go 1.23.0\n\nuse ./\n\n// =================================================================================================="
  },
  {
    "path": "cmd/gf/internal/cmd/cmd.go",
    "chars": 2160,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_build.go",
    "chars": 11697,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_doc.go",
    "chars": 4860,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_docker.go",
    "chars": 6426,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_env.go",
    "chars": 2496,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_fix.go",
    "chars": 4017,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen.go",
    "chars": 931,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen_ctrl.go",
    "chars": 376,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen_dao.go",
    "chars": 826,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen_enums.go",
    "chars": 380,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen_pb.go",
    "chars": 363,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen_pbentity.go",
    "chars": 387,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_gen_service.go",
    "chars": 388,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_init.go",
    "chars": 12663,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_install.go",
    "chars": 759,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_pack.go",
    "chars": 3408,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_run.go",
    "chars": 14241,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved\n//\n// This Source Code Form is subject to the t"
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_tpl.go",
    "chars": 5333,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_up.go",
    "chars": 7916,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_version.go",
    "chars": 4957,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_init_test.go",
    "chars": 1324,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_build_test.go",
    "chars": 4098,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_env_test.go",
    "chars": 2227,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_fix_test.go",
    "chars": 2649,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_ctrl_test.go",
    "chars": 13200,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_dao_issue_test.go",
    "chars": 24783,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_dao_sharding_test.go",
    "chars": 5604,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_dao_test.go",
    "chars": 11174,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_enums_test.go",
    "chars": 4645,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_pb_test.go",
    "chars": 5081,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_pbentity_test.go",
    "chars": 12657,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_gen_service_test.go",
    "chars": 7932,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_pack_test.go",
    "chars": 8932,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/cmd_z_unit_run_test.go",
    "chars": 9782,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl.go",
    "chars": 8837,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_api_item.go",
    "chars": 910,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_ast_parse.go",
    "chars": 2382,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_ast_parse_clear.go",
    "chars": 1008,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_calculate.go",
    "chars": 3769,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go",
    "chars": 8945,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl_clear.go",
    "chars": 1444,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go",
    "chars": 3959,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genctrl/genctrl_generate_sdk.go",
    "chars": 6606,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao.go",
    "chars": 16318,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_clear.go",
    "chars": 1372,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_dao.go",
    "chars": 8631,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_do.go",
    "chars": 3212,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_entity.go",
    "chars": 2806,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_gen_item.go",
    "chars": 1339,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_structure.go",
    "chars": 6831,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_table.go",
    "chars": 4984,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_tag.go",
    "chars": 8065,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/gendao/gendao_test.go",
    "chars": 5897,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genenums/genenums.go",
    "chars": 2733,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genenums/genenums_parser.go",
    "chars": 3327,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genenums/genenums_z_unit_test.go",
    "chars": 9567,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit.go",
    "chars": 8150,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_ast.go",
    "chars": 3122,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_downloader.go",
    "chars": 3148,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_env.go",
    "chars": 2566,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_generator.go",
    "chars": 4583,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_git_downloader.go",
    "chars": 8099,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_selector.go",
    "chars": 2723,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_version.go",
    "chars": 3886,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/geninit/geninit_z_unit_test.go",
    "chars": 9515,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genpb/genpb.go",
    "chars": 3758,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genpb/genpb_controller.go",
    "chars": 4894,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genpb/genpb_tag.go",
    "chars": 3417,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genpbentity/genpbentity.go",
    "chars": 20134,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genservice/genservice.go",
    "chars": 12973,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genservice/genservice_ast_parse.go",
    "chars": 8566,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genservice/genservice_ast_utils.go",
    "chars": 1130,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genservice/genservice_calculate.go",
    "chars": 6547,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genservice/genservice_generate.go",
    "chars": 2967,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/genservice/genservice_generate_template.go",
    "chars": 3468,
    "preview": "// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the "
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/build/multiple/multiple.go",
    "chars": 31,
    "preview": "package main\n\nfunc main() {\n\n}\n"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/build/single/main.go",
    "chars": 31,
    "preview": "package main\n\nfunc main() {\n\n}\n"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/build/varmap/go.mod",
    "chars": 336,
    "preview": "module github.com/gogf/gf/cmd/gf/cmd/gf/testdata/vardump/v2\n\ngo 1.23.0\n\ntoolchain go1.24.6\n\nrequire github.com/gogf/gf/v"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/build/varmap/go.sum",
    "chars": 5325,
    "preview": "github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=\ngithub.com/BurntSushi/toml v1.5.0/go.m"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/build/varmap/main.go",
    "chars": 154,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/gogf/gf/v2/os/gbuild\"\n)\n\nfunc main() {\n\tfor k, v := range gbuild.Data() {\n\t\t"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/fix/fix25_content.go",
    "chars": 614,
    "preview": "package testdata\n\nimport (\n\t\"testing\"\n\n\t\"github.com/gogf/gf/v2/frame/g\"\n\t\"github.com/gogf/gf/v2/net/ghttp\"\n\t\"github.com/"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/api/article/article_expect.go",
    "chars": 987,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/api/article/v1/edit.go",
    "chars": 643,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/api/article/v1/get.go",
    "chars": 580,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/api/article/v2/edit.go",
    "chars": 763,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article.go",
    "chars": 272,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_new.go",
    "chars": 544,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_create.go",
    "chars": 384,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_get_list.go",
    "chars": 366,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_get_one.go",
    "chars": 363,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v1_update.go",
    "chars": 363,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v2_create.go",
    "chars": 363,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/default/controller/article/article_v2_update.go",
    "chars": 363,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/api/dict/dict_add_new_ctrl_expect.gotest",
    "chars": 597,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/api/dict/dict_expect.go",
    "chars": 502,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/api/dict/v1/dict_type.go",
    "chars": 515,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/controller/dict/dict.go",
    "chars": 269,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/controller/dict/dict_new.go",
    "chars": 454,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/controller/dict/dict_v1_dict_type.go",
    "chars": 395,
    "preview": "package dict\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_ctrl/controller/dict/dict_v1_test_new.gotest",
    "chars": 569,
    "preview": "package dict\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/api/dict/dict_add_new_ctrl_expect.gotest",
    "chars": 597,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/api/dict/dict_expect.go",
    "chars": 502,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/api/dict/v1/dict_type.go",
    "chars": 515,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/controller/dict/dict.go",
    "chars": 269,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/controller/dict/dict_new.go",
    "chars": 454,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/controller/dict/dict_v1_dict_type.go",
    "chars": 395,
    "preview": "package dict\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/merge/add_new_file/controller/dict/dict_v1_test_new.gotest",
    "chars": 383,
    "preview": "package dict\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/article/article_expect.go",
    "chars": 477,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/article/v1/edit.go",
    "chars": 488,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/user/user_expect.go",
    "chars": 468,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/admin/user/v1/edit.go",
    "chars": 488,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/user_expect.go",
    "chars": 545,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/user_ext/user_ext_expect.go",
    "chars": 561,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/user_ext/v1/edit.go",
    "chars": 643,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/api/app/user/v1/edit.go",
    "chars": 643,
    "preview": "// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.\n//\n// This Source Code Form is subject to the ter"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/article/article.go",
    "chars": 272,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/article/article_new.go",
    "chars": 459,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/article/article_v1_create.go",
    "chars": 388,
    "preview": "package article\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"gi"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/user/user.go",
    "chars": 269,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/user/user_new.go",
    "chars": 447,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/admin/user/user_v1_create.go",
    "chars": 382,
    "preview": "package user\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user.go",
    "chars": 269,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext.go",
    "chars": 273,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext_new.go",
    "chars": 465,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext_v1_create.go",
    "chars": 393,
    "preview": "package user_ext\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"g"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_ext/user_ext_v1_update.go",
    "chars": 372,
    "preview": "package user_ext\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"g"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_new.go",
    "chars": 445,
    "preview": "// =================================================================================\n// This is auto-generated by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_v1_create.go",
    "chars": 380,
    "preview": "package user\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/genctrl/multi/controller/app/user/user_v1_update.go",
    "chars": 359,
    "preview": "package user\n\nimport (\n\t\"context\"\n\n\t\"github.com/gogf/gf/v2/errors/gcode\"\n\t\"github.com/gogf/gf/v2/errors/gerror\"\n\n\t\"githu"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user/dao/internal/table_user.go",
    "chars": 3047,
    "preview": "// ==========================================================================\n// Code generated and maintained by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user/dao/table_user.go",
    "chars": 711,
    "preview": "// =================================================================================\n// This file is auto-generated by t"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user/model/do/table_user.go",
    "chars": 763,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user/model/entity/table_user.go",
    "chars": 908,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/dao/internal/table_user.go",
    "chars": 3047,
    "preview": "// ==========================================================================\n// Code generated and maintained by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/dao/table_user.go",
    "chars": 711,
    "preview": "// =================================================================================\n// This file is auto-generated by t"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/model/do/table_user.go",
    "chars": 763,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_field_mapping/model/entity/table_user.go",
    "chars": 962,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/dao/internal/table_user.go",
    "chars": 2925,
    "preview": "// ==========================================================================\n// Code generated and maintained by GoFram"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/dao/table_user.go",
    "chars": 711,
    "preview": "// =================================================================================\n// This file is auto-generated by t"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/model/do/table_user.go",
    "chars": 649,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_sqlite3/model/entity/table_user.go",
    "chars": 763,
    "preview": "// =================================================================================\n// Code generated and maintained by"
  },
  {
    "path": "cmd/gf/internal/cmd/testdata/gendao/generated_user_type_mapping/dao/internal/table_user.go",
    "chars": 3047,
    "preview": "// ==========================================================================\n// Code generated and maintained by GoFram"
  }
]

// ... and 1895 more files (download for full content)

About this extraction

This page contains the full source code of the gogf/gf GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2095 files (10.3 MB), approximately 2.8M tokens, and a symbol index with 16948 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!