Showing preview only (5,381K chars total). Download the full file or copy to clipboard to get everything.
Repository: kataras/iris
Branch: main
Commit: 4291456991a5
Files: 1261
Total size: 4.9 MB
Directory structure:
gitextract_sx40lk7k/
├── .deepsource.toml
├── .fossa.yml
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── custom.md
│ │ └── feature_request.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ ├── scripts/
│ │ └── setup_examples_test.bash
│ └── workflows/
│ ├── ci.yml
│ └── codeql-analysis.yml
├── .gitignore
├── AUTHORS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── FAQ.md
├── HISTORY.md
├── LICENSE
├── NOTICE
├── README.md
├── README_AR.md
├── README_ES.md
├── README_FA.md
├── README_FR.md
├── README_GR.md
├── README_JA.md
├── README_KO.md
├── README_PT_BR.md
├── README_RU.md
├── README_VN.md
├── README_ZH.md
├── README_ZH_HANS.md
├── README_ZH_HANT.md
├── SECURITY.md
├── VERSION
├── _benchmarks/
│ ├── README.md
│ └── view/
│ ├── README.md
│ ├── ace/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.ace
│ │ ├── layouts/
│ │ │ └── main.ace
│ │ └── partials/
│ │ └── footer.ace
│ ├── blocks/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── django/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── handlebars/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── html/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── jet/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.jet
│ │ ├── layouts/
│ │ │ └── main.jet
│ │ └── partials/
│ │ └── footer.jet
│ ├── pug/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.pug
│ │ ├── layouts/
│ │ │ └── main.pug
│ │ └── partials/
│ │ └── footer.pug
│ └── tests.yml
├── _examples/
│ ├── README.md
│ ├── README_ZH_HANT.md
│ ├── apidoc/
│ │ └── swagger/
│ │ └── README.md
│ ├── auth/
│ │ ├── auth/
│ │ │ ├── README.md
│ │ │ ├── auth.yml
│ │ │ ├── main.go
│ │ │ ├── user.go
│ │ │ ├── user_provider.go
│ │ │ └── views/
│ │ │ ├── layouts/
│ │ │ │ └── main.html
│ │ │ ├── partials/
│ │ │ │ └── footer.html
│ │ │ └── signin.html
│ │ ├── basicauth/
│ │ │ ├── basic/
│ │ │ │ ├── main.go
│ │ │ │ └── main_test.go
│ │ │ ├── database/
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── README.md
│ │ │ │ ├── docker-compose.yml
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ └── migration/
│ │ │ │ └── db.sql
│ │ │ ├── users_file_bcrypt/
│ │ │ │ ├── main.go
│ │ │ │ └── users.yml
│ │ │ └── users_list/
│ │ │ └── main.go
│ │ ├── cors/
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ ├── index.html
│ │ │ └── main.js
│ │ ├── goth/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── index.html
│ │ │ └── user.html
│ │ ├── hcaptcha/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── register_form.html
│ │ ├── jwt/
│ │ │ ├── basic/
│ │ │ │ └── main.go
│ │ │ ├── blocklist/
│ │ │ │ └── main.go
│ │ │ ├── middleware/
│ │ │ │ └── main.go
│ │ │ ├── refresh-token/
│ │ │ │ ├── main.go
│ │ │ │ ├── rsa_private_key.pem
│ │ │ │ └── rsa_public_key.pem
│ │ │ └── tutorial/
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── auth.go
│ │ │ │ ├── router.go
│ │ │ │ └── todo.go
│ │ │ ├── domain/
│ │ │ │ ├── model/
│ │ │ │ │ ├── role.go
│ │ │ │ │ ├── todo.go
│ │ │ │ │ └── user.go
│ │ │ │ └── repository/
│ │ │ │ ├── samples.go
│ │ │ │ ├── todo_repository.go
│ │ │ │ └── user_repository.go
│ │ │ ├── go-client/
│ │ │ │ ├── README.md
│ │ │ │ ├── client.go
│ │ │ │ └── main.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── util/
│ │ │ ├── app.go
│ │ │ ├── clock.go
│ │ │ ├── password.go
│ │ │ └── uuid.go
│ │ ├── permissions/
│ │ │ └── main.go
│ │ └── recaptcha/
│ │ ├── custom_form/
│ │ │ └── main.go
│ │ └── main.go
│ ├── bootstrapper/
│ │ ├── bootstrap/
│ │ │ └── bootstrapper.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── main_test.go
│ │ ├── middleware/
│ │ │ └── identity/
│ │ │ └── identity.go
│ │ ├── routes/
│ │ │ ├── follower.go
│ │ │ ├── following.go
│ │ │ ├── index.go
│ │ │ ├── like.go
│ │ │ └── routes.go
│ │ └── views/
│ │ ├── index.html
│ │ └── shared/
│ │ ├── error.html
│ │ └── layout.html
│ ├── caddy/
│ │ ├── Caddyfile
│ │ ├── README.md
│ │ ├── server1/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── index.html
│ │ │ └── shared/
│ │ │ └── layout.html
│ │ └── server2/
│ │ └── main.go
│ ├── compression/
│ │ ├── client/
│ │ │ └── main.go
│ │ ├── client-using-iris/
│ │ │ └── main.go
│ │ ├── main.go
│ │ └── main_test.go
│ ├── configuration/
│ │ ├── from-configuration-structure/
│ │ │ └── main.go
│ │ ├── from-toml-file/
│ │ │ ├── configs/
│ │ │ │ └── iris.tml
│ │ │ └── main.go
│ │ ├── from-yaml-file/
│ │ │ ├── configs/
│ │ │ │ └── iris.yml
│ │ │ ├── main.go
│ │ │ └── shared-configuration/
│ │ │ └── main.go
│ │ ├── functional/
│ │ │ └── main.go
│ │ ├── multi-environments/
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── configuration.go
│ │ │ │ └── server.go
│ │ │ ├── cmd/
│ │ │ │ └── root_command.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ ├── server.dev.yml
│ │ │ └── server.yml
│ │ └── viper/
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── config.yml
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── convert-handlers/
│ │ ├── negroni-like/
│ │ │ └── main.go
│ │ ├── nethttp/
│ │ │ ├── main.go
│ │ │ └── wrapper/
│ │ │ └── main.go
│ │ └── real-usecase-raven/
│ │ ├── wrapping-the-router/
│ │ │ └── main.go
│ │ └── writing-middleware/
│ │ └── main.go
│ ├── cookies/
│ │ ├── basic/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── options/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── securecookie/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── database/
│ │ ├── mongodb/
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ └── store/
│ │ │ │ └── movie.go
│ │ │ ├── docker-compose.yml
│ │ │ ├── env/
│ │ │ │ └── env.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── httputil/
│ │ │ │ └── error.go
│ │ │ ├── main.go
│ │ │ └── store/
│ │ │ └── movie.go
│ │ ├── mysql/
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── api.go
│ │ │ │ ├── category_handler.go
│ │ │ │ ├── helper.go
│ │ │ │ ├── httperror.go
│ │ │ │ ├── middleware/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── product_handler.go
│ │ │ ├── cache/
│ │ │ │ └── groupcache.go
│ │ │ ├── docker-compose.yml
│ │ │ ├── entity/
│ │ │ │ ├── category.go
│ │ │ │ └── product.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ ├── migration/
│ │ │ │ ├── api_category/
│ │ │ │ │ ├── create_category.json
│ │ │ │ │ ├── insert_products_category.json
│ │ │ │ │ ├── update_category.json
│ │ │ │ │ └── update_partial_category.json
│ │ │ │ ├── api_postman.json
│ │ │ │ ├── api_product/
│ │ │ │ │ ├── create_product.json
│ │ │ │ │ ├── update_partial_product.json
│ │ │ │ │ └── update_product.json
│ │ │ │ └── db.sql
│ │ │ ├── service/
│ │ │ │ ├── category_service.go
│ │ │ │ ├── category_service_test.go
│ │ │ │ └── product_service.go
│ │ │ └── sql/
│ │ │ ├── mysql.go
│ │ │ ├── service.go
│ │ │ └── sql.go
│ │ ├── orm/
│ │ │ ├── gorm/
│ │ │ │ ├── REAMDE.md
│ │ │ │ └── main.go
│ │ │ ├── reform/
│ │ │ │ ├── controllers/
│ │ │ │ │ └── person_controller.go
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ ├── models/
│ │ │ │ │ ├── person.go
│ │ │ │ │ └── person_reform.go
│ │ │ │ └── postman_collection.json
│ │ │ └── sqlx/
│ │ │ └── main.go
│ │ └── sqlx/
│ │ └── main.go
│ ├── dependency-injection/
│ │ ├── basic/
│ │ │ ├── main.go
│ │ │ └── middleware/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── context-register-dependency/
│ │ │ └── main.go
│ │ ├── jwt/
│ │ │ ├── contrib/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── main.go
│ │ │ └── main.go
│ │ ├── overview/
│ │ │ ├── datamodels/
│ │ │ │ └── movie.go
│ │ │ ├── datasource/
│ │ │ │ └── movies.go
│ │ │ ├── main.go
│ │ │ ├── repositories/
│ │ │ │ └── movie_repository.go
│ │ │ ├── services/
│ │ │ │ └── movie_service.go
│ │ │ └── web/
│ │ │ ├── middleware/
│ │ │ │ └── basicauth.go
│ │ │ ├── routes/
│ │ │ │ ├── hello.go
│ │ │ │ └── movies.go
│ │ │ └── views/
│ │ │ └── hello/
│ │ │ ├── index.html
│ │ │ └── name.html
│ │ ├── sessions/
│ │ │ ├── main.go
│ │ │ └── routes/
│ │ │ └── index.go
│ │ └── smart-contract/
│ │ └── main.go
│ ├── desktop/
│ │ ├── blink/
│ │ │ └── main.go
│ │ ├── lorca/
│ │ │ └── main.go
│ │ └── webview/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── dropzonejs/
│ │ ├── README.md
│ │ ├── README_PART2.md
│ │ ├── meta.yml
│ │ └── src/
│ │ ├── main.go
│ │ ├── public/
│ │ │ ├── css/
│ │ │ │ └── dropzone.css
│ │ │ └── js/
│ │ │ └── dropzone.js
│ │ └── views/
│ │ └── upload.html
│ ├── file-server/
│ │ ├── basic/
│ │ │ ├── assets/
│ │ │ │ ├── app2/
│ │ │ │ │ ├── app22/
│ │ │ │ │ │ └── just_a_text_no_index.txt
│ │ │ │ │ ├── app2app3/
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── assets.system/
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ └── test.txt
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── embedding-files-into-app/
│ │ │ ├── assets/
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── embedding-files-into-app-bindata/
│ │ │ ├── assets/
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── embedding-gzipped-files-into-app-bindata/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── favicon/
│ │ │ └── main.go
│ │ ├── file-server/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── dirlist.html
│ │ │ └── upload.html
│ │ ├── http2push/
│ │ │ ├── assets/
│ │ │ │ ├── app2/
│ │ │ │ │ ├── app2app3/
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ └── main.css
│ │ │ │ │ │ ├── dirs/
│ │ │ │ │ │ │ ├── dir1/
│ │ │ │ │ │ │ │ └── text.txt
│ │ │ │ │ │ │ ├── dir2/
│ │ │ │ │ │ │ │ └── text.txt
│ │ │ │ │ │ │ └── text.txt
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── mydir/
│ │ │ │ │ └── text.txt
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── main.go
│ │ │ ├── mycert.crt
│ │ │ └── mykey.key
│ │ ├── http2push-embedded/
│ │ │ ├── bindata.go
│ │ │ └── main.go
│ │ ├── http2push-embedded-gzipped/
│ │ │ ├── bindata.go
│ │ │ └── main.go
│ │ ├── send-files/
│ │ │ └── main.go
│ │ ├── single-page-application/
│ │ │ ├── basic/
│ │ │ │ ├── main.go
│ │ │ │ └── public/
│ │ │ │ ├── index.html
│ │ │ │ └── index.js
│ │ │ ├── embedded-single-page-application/
│ │ │ │ ├── bindata.go
│ │ │ │ ├── data/
│ │ │ │ │ ├── public/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── app2/
│ │ │ │ │ │ │ └── index.html
│ │ │ │ │ │ └── css/
│ │ │ │ │ │ └── main.css
│ │ │ │ │ └── views/
│ │ │ │ │ └── index.html
│ │ │ │ ├── main.go
│ │ │ │ └── main_test.go
│ │ │ └── embedded-single-page-application-with-other-routes/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ ├── app.js
│ │ │ ├── css/
│ │ │ │ └── main.css
│ │ │ └── index.html
│ │ ├── spa-vue-router/
│ │ │ ├── frontend/
│ │ │ │ ├── css/
│ │ │ │ │ └── page.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── app.js
│ │ │ └── main.go
│ │ ├── subdomain/
│ │ │ ├── assets/
│ │ │ │ ├── app2/
│ │ │ │ │ ├── app22/
│ │ │ │ │ │ └── just_a_text_no_index.txt
│ │ │ │ │ ├── app2app3/
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── jquery-2.1.1.js
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── upload-file/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── upload_form.html
│ │ ├── upload-files/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── templates/
│ │ │ └── upload_form.html
│ │ └── webdav/
│ │ ├── main.go
│ │ ├── newdir/
│ │ │ └── .gitkeep
│ │ └── test.txt
│ ├── graphql/
│ │ └── schema-first/
│ │ ├── README.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── gqlgen.yml
│ │ ├── graph/
│ │ │ ├── generated.go
│ │ │ ├── model/
│ │ │ │ └── models_gen.go
│ │ │ ├── resolver.go
│ │ │ ├── schema.graphqls
│ │ │ └── schema.resolvers.go
│ │ ├── server.go
│ │ └── tools.go
│ ├── http-client/
│ │ └── weatherapi/
│ │ ├── client/
│ │ │ ├── client.go
│ │ │ └── response.go
│ │ └── main.go
│ ├── http-server/
│ │ ├── README.md
│ │ ├── custom-httpserver/
│ │ │ ├── easy-way/
│ │ │ │ └── main.go
│ │ │ ├── multi/
│ │ │ │ └── main.go
│ │ │ └── std-way/
│ │ │ └── main.go
│ │ ├── custom-listener/
│ │ │ └── main.go
│ │ ├── graceful-shutdown/
│ │ │ ├── custom-notifier/
│ │ │ │ └── main.go
│ │ │ └── default-notifier/
│ │ │ └── main.go
│ │ ├── h2c/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── http3-quic/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── localhost.cert
│ │ │ ├── localhost.key
│ │ │ └── main.go
│ │ ├── iris-configurator-and-host-configurator/
│ │ │ └── main.go
│ │ ├── listen-addr/
│ │ │ ├── main.go
│ │ │ └── omit-server-errors/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── listen-addr-public/
│ │ │ └── main.go
│ │ ├── listen-letsencrypt/
│ │ │ └── main.go
│ │ ├── listen-tls/
│ │ │ ├── main.go
│ │ │ ├── mycert.crt
│ │ │ └── mykey.key
│ │ ├── listen-unix/
│ │ │ └── main.go
│ │ ├── notify-on-shutdown/
│ │ │ └── main.go
│ │ ├── socket-sharding/
│ │ │ └── main.go
│ │ └── timeout/
│ │ └── main.go
│ ├── i18n/
│ │ ├── basic/
│ │ │ ├── hosts
│ │ │ ├── locales/
│ │ │ │ ├── el-GR/
│ │ │ │ │ ├── locale_el-GR.ini
│ │ │ │ │ ├── locale_multi_first_el-GR.yml
│ │ │ │ │ └── locale_multi_second_el-GR.ini
│ │ │ │ ├── en-US/
│ │ │ │ │ ├── locale_en-US.ini
│ │ │ │ │ ├── locale_multi_first_en-US.yml
│ │ │ │ │ └── locale_multi_second_en-US.ini
│ │ │ │ └── zh-CN/
│ │ │ │ └── locale_zh-CN.ini
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── views/
│ │ │ └── index.html
│ │ ├── plurals/
│ │ │ ├── locales/
│ │ │ │ └── en-US/
│ │ │ │ ├── 1648.ini
│ │ │ │ └── welcome.yml
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── template/
│ │ │ ├── locales/
│ │ │ │ ├── el-GR/
│ │ │ │ │ ├── other.ini
│ │ │ │ │ └── user.ini
│ │ │ │ └── en-US/
│ │ │ │ ├── other.ini
│ │ │ │ └── user.ini
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── template-embedded/
│ │ ├── embedded/
│ │ │ └── locales/
│ │ │ ├── el-GR/
│ │ │ │ ├── other.ini
│ │ │ │ └── user.ini
│ │ │ └── en-US/
│ │ │ ├── other.ini
│ │ │ └── user.ini
│ │ ├── main.go
│ │ └── main_test.go
│ ├── kafka-api/
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── postman_collection.json
│ ├── logging/
│ │ ├── file-logger/
│ │ │ └── main.go
│ │ ├── json-logger/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── request-logger/
│ │ │ ├── accesslog/
│ │ │ │ ├── access.log.sample
│ │ │ │ ├── main.go
│ │ │ │ └── public/
│ │ │ │ └── index.html
│ │ │ ├── accesslog-broker/
│ │ │ │ └── main.go
│ │ │ ├── accesslog-csv/
│ │ │ │ ├── access_log.csv.sample
│ │ │ │ └── main.go
│ │ │ ├── accesslog-formatter/
│ │ │ │ └── main.go
│ │ │ ├── accesslog-proxy/
│ │ │ │ ├── main.go
│ │ │ │ └── target/
│ │ │ │ └── main.go
│ │ │ ├── accesslog-simple/
│ │ │ │ ├── access.log.sample
│ │ │ │ └── main.go
│ │ │ ├── accesslog-slack/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ └── slack_formatter.go
│ │ │ └── accesslog-template/
│ │ │ └── main.go
│ │ └── rollbar/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── monitor/
│ │ ├── monitor-middleware/
│ │ │ └── main.go
│ │ └── statsviz/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── mvc/
│ │ ├── authenticated-controller/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── basic/
│ │ │ ├── main.go
│ │ │ └── wildcard/
│ │ │ └── main.go
│ │ ├── error-handler/
│ │ │ └── main.go
│ │ ├── error-handler-custom-result/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ └── 500.html
│ │ ├── error-handler-hijack/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ └── 500.html
│ │ ├── error-handler-http/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ ├── 500.html
│ │ │ └── unexpected-error.html
│ │ ├── error-handler-preflight/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ └── 500.html
│ │ ├── grpc-compatible/
│ │ │ ├── README.md
│ │ │ ├── grpc-client/
│ │ │ │ └── main.go
│ │ │ ├── helloworld/
│ │ │ │ ├── README.md
│ │ │ │ ├── helloworld.pb.go
│ │ │ │ └── helloworld.proto
│ │ │ ├── http-client/
│ │ │ │ └── main.go
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ ├── server.crt
│ │ │ └── server.key
│ │ ├── grpc-compatible-bidirectional-stream/
│ │ │ ├── client/
│ │ │ │ └── main.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── helloworld/
│ │ │ │ ├── helloworld.pb.go
│ │ │ │ └── helloworld_grpc.pb.go
│ │ │ ├── helloworld.proto
│ │ │ ├── server/
│ │ │ │ └── main.go
│ │ │ ├── server.crt
│ │ │ └── server.key
│ │ ├── hello-world/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── login/
│ │ │ ├── datamodels/
│ │ │ │ └── user.go
│ │ │ ├── datasource/
│ │ │ │ └── users.go
│ │ │ ├── main.go
│ │ │ ├── repositories/
│ │ │ │ └── user_repository.go
│ │ │ ├── services/
│ │ │ │ └── user_service.go
│ │ │ └── web/
│ │ │ ├── controllers/
│ │ │ │ ├── user_controller.go
│ │ │ │ └── users_controller.go
│ │ │ ├── middleware/
│ │ │ │ └── basicauth.go
│ │ │ ├── public/
│ │ │ │ └── css/
│ │ │ │ └── site.css
│ │ │ ├── viewmodels/
│ │ │ │ └── README.md
│ │ │ └── views/
│ │ │ ├── shared/
│ │ │ │ ├── error.html
│ │ │ │ └── layout.html
│ │ │ └── user/
│ │ │ ├── login.html
│ │ │ ├── me.html
│ │ │ └── register.html
│ │ ├── login-mvc-single-responsibility/
│ │ │ ├── main.go
│ │ │ ├── public/
│ │ │ │ └── css/
│ │ │ │ └── site.css
│ │ │ ├── user/
│ │ │ │ ├── auth.go
│ │ │ │ ├── controller.go
│ │ │ │ ├── datasource.go
│ │ │ │ └── model.go
│ │ │ └── views/
│ │ │ ├── shared/
│ │ │ │ ├── error.html
│ │ │ │ └── layout.html
│ │ │ └── user/
│ │ │ ├── login.html
│ │ │ ├── me.html
│ │ │ ├── notfound.html
│ │ │ └── register.html
│ │ ├── middleware/
│ │ │ ├── main.go
│ │ │ ├── per-method/
│ │ │ │ └── main.go
│ │ │ └── without-ctx-next/
│ │ │ └── main.go
│ │ ├── overview/
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── controller/
│ │ │ │ └── greet_controller.go
│ │ │ ├── database/
│ │ │ │ ├── database.go
│ │ │ │ ├── mysql.go
│ │ │ │ └── sqlite.go
│ │ │ ├── docker-compose.yml
│ │ │ ├── environment/
│ │ │ │ └── environment.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ ├── model/
│ │ │ │ ├── request.go
│ │ │ │ └── response.go
│ │ │ └── service/
│ │ │ └── greet_service.go
│ │ ├── regexp/
│ │ │ └── main.go
│ │ ├── repository/
│ │ │ ├── datamodels/
│ │ │ │ ├── README.md
│ │ │ │ └── movie.go
│ │ │ ├── datasource/
│ │ │ │ ├── README.md
│ │ │ │ └── movies.go
│ │ │ ├── main.go
│ │ │ ├── models/
│ │ │ │ └── README.md
│ │ │ ├── repositories/
│ │ │ │ ├── README.md
│ │ │ │ └── movie_repository.go
│ │ │ ├── services/
│ │ │ │ ├── README.md
│ │ │ │ └── movie_service.go
│ │ │ └── web/
│ │ │ ├── controllers/
│ │ │ │ ├── hello_controller.go
│ │ │ │ └── movie_controller.go
│ │ │ ├── middleware/
│ │ │ │ └── basicauth.go
│ │ │ ├── viewmodels/
│ │ │ │ └── README.md
│ │ │ └── views/
│ │ │ └── hello/
│ │ │ ├── index.html
│ │ │ └── name.html
│ │ ├── request-default-values/
│ │ │ └── main.go
│ │ ├── session-controller/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── singleton/
│ │ │ └── main.go
│ │ ├── versioned-controller/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── vuejs-todo-mvc/
│ │ │ ├── README.md
│ │ │ └── src/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── todo/
│ │ │ │ ├── item.go
│ │ │ │ └── service.go
│ │ │ └── web/
│ │ │ ├── controllers/
│ │ │ │ └── todo_controller.go
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ ├── css/
│ │ │ │ └── index
│ │ │ ├── index.html
│ │ │ └── js/
│ │ │ ├── app.js
│ │ │ └── lib/
│ │ │ └── .gitkeep
│ │ ├── websocket/
│ │ │ ├── browser/
│ │ │ │ └── index.html
│ │ │ └── main.go
│ │ └── websocket-auth/
│ │ ├── auth.yml
│ │ ├── browser/
│ │ │ └── index.html
│ │ ├── main.go
│ │ ├── user.go
│ │ ├── user_provider.go
│ │ └── views/
│ │ ├── layouts/
│ │ │ └── main.html
│ │ ├── partials/
│ │ │ └── footer.html
│ │ └── signin.html
│ ├── pprof/
│ │ └── main.go
│ ├── project/
│ │ ├── README.md
│ │ ├── api/
│ │ │ ├── configuration.go
│ │ │ ├── router.go
│ │ │ ├── server.go
│ │ │ └── users/
│ │ │ └── api.go
│ │ ├── cmd/
│ │ │ ├── cmd.go
│ │ │ └── help.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── pkg/
│ │ │ ├── database/
│ │ │ │ └── database.go
│ │ │ └── http/
│ │ │ └── handlers/
│ │ │ └── cors.go
│ │ ├── server.yml
│ │ └── user/
│ │ ├── repository.go
│ │ └── user.go
│ ├── recover/
│ │ ├── main.go
│ │ └── panic-and-custom-error-handler-with-compression/
│ │ └── main.go
│ ├── request-body/
│ │ ├── form-query-headers-params-decoder/
│ │ │ └── main.go
│ │ ├── read-body/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-custom-per-type/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-custom-via-unmarshaler/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-form/
│ │ │ ├── checkboxes/
│ │ │ │ ├── main.go
│ │ │ │ └── templates/
│ │ │ │ └── form.html
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── form.html
│ │ ├── read-headers/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-json/
│ │ │ └── main.go
│ │ ├── read-json-stream/
│ │ │ └── main.go
│ │ ├── read-json-struct-validation/
│ │ │ └── main.go
│ │ ├── read-many/
│ │ │ └── main.go
│ │ ├── read-msgpack/
│ │ │ └── main.go
│ │ ├── read-params/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-query/
│ │ │ └── main.go
│ │ ├── read-url/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-xml/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── read-yaml/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── request-ratelimit/
│ │ ├── rate-middleware/
│ │ │ └── main.go
│ │ └── ulule-limiter/
│ │ └── main.go
│ ├── request-referrer/
│ │ └── main.go
│ ├── response-writer/
│ │ ├── cache/
│ │ │ ├── client-side/
│ │ │ │ └── main.go
│ │ │ └── simple/
│ │ │ └── main.go
│ │ ├── content-negotiation/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── http2push/
│ │ │ ├── main.go
│ │ │ ├── mycert.crt
│ │ │ ├── mykey.key
│ │ │ └── public/
│ │ │ └── main.js
│ │ ├── json-third-party/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── protobuf/
│ │ │ ├── README.md
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── protos/
│ │ │ ├── hello.pb.go
│ │ │ └── hello.proto
│ │ ├── sse/
│ │ │ ├── main.go
│ │ │ └── optional.sse.mini.js.html
│ │ ├── sse-third-party/
│ │ │ └── main.go
│ │ ├── sse-third-party-2/
│ │ │ ├── index.html
│ │ │ └── main.go
│ │ ├── stream-writer/
│ │ │ └── main.go
│ │ └── write-rest/
│ │ └── main.go
│ ├── routing/
│ │ ├── basic/
│ │ │ ├── .dockerignore
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── docker-compose.yml
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── conditional-chain/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── custom-context/
│ │ │ └── main.go
│ │ ├── custom-router/
│ │ │ └── main.go
│ │ ├── custom-wrapper/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── public/
│ │ │ ├── app.js
│ │ │ ├── css/
│ │ │ │ └── main.css
│ │ │ └── index.html
│ │ ├── dynamic-path/
│ │ │ ├── at-username/
│ │ │ │ └── main.go
│ │ │ ├── main.go
│ │ │ ├── root-wildcard/
│ │ │ │ └── main.go
│ │ │ └── same-pattern-different-func/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── use-global/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── hello-world/
│ │ │ └── main.go
│ │ ├── http-errors/
│ │ │ ├── main.go
│ │ │ └── reset-body/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── http-wire-errors/
│ │ │ ├── main.go
│ │ │ └── service/
│ │ │ └── main.go
│ │ ├── intelligence/
│ │ │ ├── main.go
│ │ │ └── manual/
│ │ │ └── main.go
│ │ ├── macros/
│ │ │ └── main.go
│ │ ├── main.go
│ │ ├── main_test.go
│ │ ├── overview/
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ └── assets/
│ │ │ └── css/
│ │ │ └── main.css
│ │ ├── overview-2/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── user/
│ │ │ ├── create_verification.html
│ │ │ └── profile.html
│ │ ├── party-controller/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── pkg/
│ │ │ └── weatherapi/
│ │ │ ├── client.go
│ │ │ └── response.go
│ │ ├── remove-handler/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── remove-route/
│ │ │ └── main.go
│ │ ├── reverse/
│ │ │ └── main.go
│ │ ├── rewrite/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── redirects.yml
│ │ ├── route-handlers-execution-rules/
│ │ │ └── main.go
│ │ ├── route-register-rule/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── route-state/
│ │ │ └── main.go
│ │ ├── sitemap/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── subdomains/
│ │ │ ├── http-errors-view/
│ │ │ │ ├── main.go
│ │ │ │ ├── main_test.go
│ │ │ │ └── views/
│ │ │ │ ├── error.html
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── layout.html
│ │ │ │ │ └── test.layout.html
│ │ │ │ └── partials/
│ │ │ │ ├── 404.html
│ │ │ │ └── 500.html
│ │ │ ├── multi/
│ │ │ │ ├── hosts
│ │ │ │ └── main.go
│ │ │ ├── redirect/
│ │ │ │ ├── hosts
│ │ │ │ ├── main.go
│ │ │ │ └── multi-instances/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ ├── other/
│ │ │ │ │ └── server.go
│ │ │ │ └── root/
│ │ │ │ └── server.go
│ │ │ ├── single/
│ │ │ │ ├── hosts
│ │ │ │ └── main.go
│ │ │ ├── wildcard/
│ │ │ │ ├── hosts
│ │ │ │ └── main.go
│ │ │ └── www/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── www-method/
│ │ │ └── main.go
│ │ ├── versioning/
│ │ │ ├── main.go
│ │ │ ├── v1/
│ │ │ │ └── index.html
│ │ │ ├── v2/
│ │ │ │ └── index.html
│ │ │ └── v3/
│ │ │ └── index.html
│ │ └── writing-a-middleware/
│ │ ├── globally/
│ │ │ └── main.go
│ │ ├── per-route/
│ │ │ └── main.go
│ │ ├── share-funcs/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── share-services/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── sessions/
│ │ ├── basic/
│ │ │ └── main.go
│ │ ├── database/
│ │ │ ├── badger/
│ │ │ │ └── main.go
│ │ │ ├── boltdb/
│ │ │ │ └── main.go
│ │ │ └── redis/
│ │ │ ├── Dockerfile
│ │ │ ├── docker-compose.yml
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── flash-messages/
│ │ │ └── main.go
│ │ ├── overview/
│ │ │ ├── example/
│ │ │ │ └── example.go
│ │ │ └── main.go
│ │ ├── securecookie/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── viewdata/
│ │ ├── main.go
│ │ └── views/
│ │ └── index.html
│ ├── testing/
│ │ ├── ginkgotest/
│ │ │ ├── ginkgotest_suite_test.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── httptest/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── url-shortener/
│ │ ├── README.md
│ │ ├── factory.go
│ │ ├── main.go
│ │ ├── main_test.go
│ │ ├── resources/
│ │ │ └── css/
│ │ │ └── style.css
│ │ ├── store.go
│ │ └── templates/
│ │ └── index.html
│ ├── view/
│ │ ├── context-view-data/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── index.html
│ │ │ └── layouts/
│ │ │ └── layout.html
│ │ ├── context-view-engine/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── admin/
│ │ │ │ ├── index.html
│ │ │ │ └── layouts/
│ │ │ │ └── main.html
│ │ │ ├── on-fly/
│ │ │ │ └── index.html
│ │ │ └── public/
│ │ │ ├── 500.html
│ │ │ ├── index.html
│ │ │ ├── layouts/
│ │ │ │ ├── error.html
│ │ │ │ └── main.html
│ │ │ └── partials/
│ │ │ └── footer.html
│ │ ├── embedding-templates-into-app/
│ │ │ ├── embedded/
│ │ │ │ └── templates/
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── layout.html
│ │ │ │ │ └── mylayout.html
│ │ │ │ ├── page1.html
│ │ │ │ └── partials/
│ │ │ │ └── page1_partial1.html
│ │ │ └── main.go
│ │ ├── embedding-templates-into-app-bindata/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── layouts/
│ │ │ │ ├── layout.html
│ │ │ │ └── mylayout.html
│ │ │ ├── page1.html
│ │ │ └── partials/
│ │ │ └── page1_partial1.html
│ │ ├── fallback/
│ │ │ ├── main.go
│ │ │ └── view/
│ │ │ └── fallback.html
│ │ ├── herotemplate/
│ │ │ ├── README.md
│ │ │ ├── app.go
│ │ │ └── template/
│ │ │ ├── index.html
│ │ │ ├── index.html.go
│ │ │ ├── user.html
│ │ │ ├── user.html.go
│ │ │ ├── userlist.html
│ │ │ ├── userlist.html.go
│ │ │ ├── userlistwriter.html
│ │ │ └── userlistwriter.html.go
│ │ ├── layout/
│ │ │ ├── ace/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.ace
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.ace
│ │ │ │ └── partials/
│ │ │ │ └── footer.ace
│ │ │ ├── blocks/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── django/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── handlebars/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── html/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── jet/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.jet
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.jet
│ │ │ │ └── partials/
│ │ │ │ └── footer.jet
│ │ │ └── pug/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── index.pug
│ │ │ ├── layouts/
│ │ │ │ └── main.pug
│ │ │ └── partials/
│ │ │ └── footer.pug
│ │ ├── overview/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── example.html
│ │ │ ├── functions.html
│ │ │ └── hi.html
│ │ ├── parse-template/
│ │ │ ├── django/
│ │ │ │ └── main.go
│ │ │ ├── handlebars/
│ │ │ │ └── main.go
│ │ │ ├── jet/
│ │ │ │ └── main.go
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── layouts/
│ │ │ └── main.html
│ │ ├── quicktemplate/
│ │ │ ├── README.md
│ │ │ ├── controllers/
│ │ │ │ ├── execute_template.go
│ │ │ │ ├── hello.go
│ │ │ │ └── index.go
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ ├── models/
│ │ │ │ └── .gitkeep
│ │ │ └── templates/
│ │ │ ├── base.qtpl
│ │ │ ├── base.qtpl.go
│ │ │ ├── hello.qtpl
│ │ │ ├── hello.qtpl.go
│ │ │ ├── index.qtpl
│ │ │ └── index.qtpl.go
│ │ ├── templ/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── hello.templ
│ │ │ ├── hello_templ.go
│ │ │ └── main.go
│ │ ├── template_ace_0/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── index.ace
│ │ │ ├── layouts/
│ │ │ │ └── main.ace
│ │ │ └── partials/
│ │ │ ├── footer.ace
│ │ │ └── header.ace
│ │ ├── template_blocks_0/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 500.html
│ │ │ ├── index.html
│ │ │ ├── layouts/
│ │ │ │ ├── error.html
│ │ │ │ └── main.html
│ │ │ └── partials/
│ │ │ └── footer.html
│ │ ├── template_blocks_1_embedded/
│ │ │ ├── bindata.go
│ │ │ └── main.go
│ │ ├── template_blocks_2/
│ │ │ ├── main.go
│ │ │ └── src/
│ │ │ └── public/
│ │ │ └── html/
│ │ │ ├── files/
│ │ │ │ └── list.html
│ │ │ ├── layouts/
│ │ │ │ ├── main.html
│ │ │ │ └── secondary.html
│ │ │ └── menu/
│ │ │ └── menu.html
│ │ ├── template_django_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── hi.html
│ │ ├── template_django_1/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── page.html
│ │ ├── template_handlebars_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── example.html
│ │ ├── template_html_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── hi.html
│ │ ├── template_html_1/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── layout.html
│ │ │ └── mypage.html
│ │ ├── template_html_2/
│ │ │ ├── README.md
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── layouts/
│ │ │ │ ├── layout.html
│ │ │ │ └── mylayout.html
│ │ │ ├── page1.html
│ │ │ └── partials/
│ │ │ └── page1_partial1.html
│ │ ├── template_html_3/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── page.html
│ │ ├── template_html_4/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── page.html
│ │ ├── template_html_5/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── about.html
│ │ │ ├── home.html
│ │ │ ├── layout.html
│ │ │ └── user/
│ │ │ └── index.html
│ │ ├── template_jet_0/
│ │ │ ├── README.md
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── layouts/
│ │ │ │ └── application.jet
│ │ │ └── todos/
│ │ │ ├── index.jet
│ │ │ └── show.jet
│ │ ├── template_jet_1_embedded/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── includes/
│ │ │ │ ├── _partial.jet
│ │ │ │ └── blocks.jet
│ │ │ ├── index.jet
│ │ │ └── layouts/
│ │ │ └── application.jet
│ │ ├── template_jet_2/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── page.jet
│ │ ├── template_jet_3/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── index.jet
│ │ ├── template_pug_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── index.pug
│ │ ├── template_pug_1/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── footer.pug
│ │ │ ├── header.pug
│ │ │ └── index.pug
│ │ ├── template_pug_2_embedded/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── index.pug
│ │ │ └── layout.pug
│ │ └── write-to/
│ │ ├── main.go
│ │ └── views/
│ │ ├── email/
│ │ │ └── simple.html
│ │ └── shared/
│ │ └── email.html
│ ├── webassembly/
│ │ ├── client/
│ │ │ ├── go-wasm-runtime.js
│ │ │ ├── hello.html
│ │ │ ├── hello_go116.go
│ │ │ └── main.js
│ │ └── main.go
│ └── websocket/
│ ├── README.md
│ ├── basic/
│ │ ├── README.md
│ │ ├── browser/
│ │ │ └── index.html
│ │ ├── browserify/
│ │ │ ├── app.js
│ │ │ ├── bundle.js
│ │ │ ├── client.html
│ │ │ └── package.json
│ │ ├── go-client/
│ │ │ └── client.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── nodejs-client/
│ │ │ ├── client.js
│ │ │ └── package.json
│ │ └── server.go
│ ├── gorilla-filewatch/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── testfile.txt
│ │ └── views/
│ │ └── home.html
│ ├── native-messages/
│ │ ├── main.go
│ │ ├── static/
│ │ │ └── js/
│ │ │ └── chat.js
│ │ └── templates/
│ │ └── client.html
│ ├── online-visitors/
│ │ ├── main.go
│ │ ├── static/
│ │ │ └── assets/
│ │ │ └── js/
│ │ │ └── visitors.js
│ │ └── templates/
│ │ ├── index.html
│ │ └── other.html
│ ├── secure/
│ │ └── README.md
│ └── socketio/
│ ├── asset/
│ │ └── index.html
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── _proposals/
│ ├── route_builder.md
│ └── xerrors_party.md
├── aliases.go
├── apps/
│ ├── README.md
│ ├── apps.go
│ ├── switch.go
│ ├── switch_hosts.go
│ ├── switch_hosts_test.go
│ ├── switch_options.go
│ ├── switch_options_test.go
│ ├── switch_scheme.go
│ └── switch_test.go
├── auth/
│ ├── auth.go
│ ├── configuration.go
│ ├── provider.go
│ └── user.go
├── cache/
│ ├── browser.go
│ ├── browser_test.go
│ ├── cache.go
│ ├── cache_test.go
│ ├── cfg/
│ │ └── cfg.go
│ ├── client/
│ │ ├── client.go
│ │ ├── handler.go
│ │ ├── rule/
│ │ │ ├── chained.go
│ │ │ ├── conditional.go
│ │ │ ├── header.go
│ │ │ ├── not_satisfied.go
│ │ │ ├── rule.go
│ │ │ ├── satisfied.go
│ │ │ └── validator.go
│ │ └── ruleset.go
│ ├── entry/
│ │ ├── entry.go
│ │ ├── pool.go
│ │ ├── response.go
│ │ └── store.go
│ ├── ruleset/
│ │ └── ruleset.go
│ └── uri/
│ └── uribuilder.go
├── cli.go
├── configuration.go
├── configuration_test.go
├── context/
│ ├── accept_header.go
│ ├── application.go
│ ├── compress.go
│ ├── configuration.go
│ ├── context.go
│ ├── context_func.go
│ ├── context_go118.go
│ ├── context_user.go
│ ├── counter.go
│ ├── fs.go
│ ├── handler.go
│ ├── i18n.go
│ ├── pool.go
│ ├── problem.go
│ ├── request_params.go
│ ├── response_recorder.go
│ ├── response_writer.go
│ ├── route.go
│ ├── status.go
│ ├── strconv.go
│ └── view.go
├── context_wrapper.go
├── core/
│ ├── errgroup/
│ │ ├── errgroup.go
│ │ └── errgroup_test.go
│ ├── handlerconv/
│ │ ├── from_std.go
│ │ └── from_std_test.go
│ ├── host/
│ │ ├── interrupt.go
│ │ ├── proxy.go
│ │ ├── proxy_test.go
│ │ ├── supervisor.go
│ │ ├── supervisor_task_example_test.go
│ │ ├── supervisor_test.go
│ │ ├── task.go
│ │ └── waiter.go
│ ├── memstore/
│ │ ├── gob.go
│ │ ├── lifetime.go
│ │ ├── memstore.go
│ │ └── memstore_test.go
│ ├── netutil/
│ │ ├── addr.go
│ │ ├── addr_test.go
│ │ ├── client.go
│ │ ├── ip.go
│ │ ├── ip_test.go
│ │ ├── server.go
│ │ ├── tcp.go
│ │ ├── tcp_soreuse_control_unix.go
│ │ ├── tcp_soreuse_control_wasm.go
│ │ └── tcp_soreuse_control_windows.go
│ └── router/
│ ├── TestUseRouterParentDisallow_fuzz_test.go
│ ├── api_builder.go
│ ├── api_builder_benchmark_test.go
│ ├── api_container.go
│ ├── fs.go
│ ├── handler.go
│ ├── handler_debug.go
│ ├── handler_execution_rules.go
│ ├── handler_execution_rules_test.go
│ ├── mime.go
│ ├── party.go
│ ├── path.go
│ ├── path_test.go
│ ├── route.go
│ ├── route_register_rule_test.go
│ ├── route_test.go
│ ├── router.go
│ ├── router_handlers_order_test.go
│ ├── router_subdomain_redirect.go
│ ├── router_test.go
│ ├── router_wildcard_root_test.go
│ ├── router_wrapper.go
│ ├── router_wrapper_test.go
│ ├── status_test.go
│ └── trie.go
├── doc.go
├── go.mod
├── go.sum
├── hero/
│ ├── binding.go
│ ├── binding_test.go
│ ├── container.go
│ ├── container_test.go
│ ├── dependency.go
│ ├── dependency_source.go
│ ├── dependency_test.go
│ ├── func_result.go
│ ├── func_result_test.go
│ ├── handler.go
│ ├── handler_test.go
│ ├── param_test.go
│ ├── reflect.go
│ ├── reflect_test.go
│ ├── struct.go
│ └── struct_test.go
├── httptest/
│ ├── aliases.go
│ ├── httptest.go
│ ├── netutils.go
│ ├── server.go
│ └── status.go
├── i18n/
│ ├── i18n.go
│ ├── internal/
│ │ ├── aliases.go
│ │ ├── catalog.go
│ │ ├── locale.go
│ │ ├── message.go
│ │ ├── plural.go
│ │ ├── template.go
│ │ └── var.go
│ └── loader.go
├── iris.go
├── iris_guide.go
├── macro/
│ ├── handler/
│ │ ├── handler.go
│ │ └── handler_test.go
│ ├── interpreter/
│ │ ├── ast/
│ │ │ └── ast.go
│ │ ├── lexer/
│ │ │ ├── lexer.go
│ │ │ └── lexer_test.go
│ │ ├── parser/
│ │ │ ├── parser.go
│ │ │ └── parser_test.go
│ │ └── token/
│ │ └── token.go
│ ├── macro.go
│ ├── macro_test.go
│ ├── macros.go
│ └── template.go
├── middleware/
│ ├── README.md
│ ├── accesslog/
│ │ ├── accesslog.go
│ │ ├── accesslog_test.go
│ │ ├── broker.go
│ │ ├── csv.go
│ │ ├── csv_test.go
│ │ ├── json.go
│ │ ├── json_easy.go
│ │ ├── log.go
│ │ └── template.go
│ ├── basicauth/
│ │ ├── basicauth.go
│ │ ├── basicauth_test.go
│ │ ├── error.go
│ │ ├── header.go
│ │ ├── header_test.go
│ │ ├── user.go
│ │ └── user_test.go
│ ├── cors/
│ │ └── cors.go
│ ├── grpc/
│ │ └── grpc.go
│ ├── hcaptcha/
│ │ ├── ARTICLE.md
│ │ └── hcaptcha.go
│ ├── jwt/
│ │ ├── ARTICLE.md
│ │ ├── aliases.go
│ │ ├── blocklist/
│ │ │ └── redis/
│ │ │ └── blocklist.go
│ │ ├── blocklist.go
│ │ ├── extractor.go
│ │ ├── jwt.go
│ │ ├── jwt_test.go
│ │ ├── signer.go
│ │ └── verifier.go
│ ├── logger/
│ │ ├── config.go
│ │ └── logger.go
│ ├── methodoverride/
│ │ ├── methodoverride.go
│ │ └── methodoverride_test.go
│ ├── modrevision/
│ │ └── modrevision.go
│ ├── monitor/
│ │ ├── expvar_uint64.go
│ │ ├── monitor.go
│ │ ├── stats.go
│ │ └── view.go
│ ├── pprof/
│ │ └── pprof.go
│ ├── rate/
│ │ └── rate.go
│ ├── recaptcha/
│ │ └── recaptcha.go
│ ├── recover/
│ │ └── recover.go
│ ├── requestid/
│ │ ├── requestid.go
│ │ └── requestid_test.go
│ └── rewrite/
│ ├── rewrite.go
│ └── rewrite_test.go
├── mvc/
│ ├── aliases.go
│ ├── controller.go
│ ├── controller_handle_test.go
│ ├── controller_method_parser.go
│ ├── controller_method_result_test.go
│ ├── controller_overlap_test.go
│ ├── controller_test.go
│ ├── grpc.go
│ ├── mvc.go
│ ├── reflect.go
│ └── versioning.go
├── sessions/
│ ├── config.go
│ ├── database.go
│ ├── provider.go
│ ├── session.go
│ ├── sessiondb/
│ │ ├── badger/
│ │ │ └── database.go
│ │ ├── boltdb/
│ │ │ └── database.go
│ │ └── redis/
│ │ ├── database.go
│ │ ├── driver.go
│ │ └── driver_goredis.go
│ ├── sessions.go
│ ├── sessions_test.go
│ └── transcoding.go
├── versioning/
│ ├── deprecation.go
│ ├── deprecation_test.go
│ ├── group.go
│ ├── group_test.go
│ ├── version.go
│ └── version_test.go
├── view/
│ ├── README.md
│ ├── ace.go
│ ├── blocks.go
│ ├── django.go
│ ├── fs.go
│ ├── handlebars.go
│ ├── html.go
│ ├── jet.go
│ ├── pug.go
│ └── view.go
├── websocket/
│ ├── aliases.go
│ └── websocket.go
└── x/
├── client/
│ ├── client.go
│ ├── client_test.go
│ ├── error.go
│ ├── handler_transport.go
│ ├── option.go
│ └── request_handler.go
├── errors/
│ ├── aliases.go
│ ├── context_error_handler.go
│ ├── errors.go
│ ├── handlers.go
│ ├── path_parameter_type_error_handler.go
│ ├── validation/
│ │ ├── error.go
│ │ ├── number.go
│ │ ├── slice.go
│ │ └── string.go
│ └── validation_error.go
├── jsonx/
│ ├── day_time.go
│ ├── day_time_test.go
│ ├── duration.go
│ ├── exampler.go
│ ├── iso8601.go
│ ├── iso8601_test.go
│ ├── jsonx.go
│ ├── kitchen_time.go
│ ├── kitchen_time_test.go
│ ├── season.go
│ ├── simple_date.go
│ ├── simple_date_test.go
│ └── time_notation.go
├── mathx/
│ └── round.go
├── pagination/
│ └── pagination.go
├── reflex/
│ ├── error.go
│ ├── func.go
│ ├── reflex.go
│ ├── struct.go
│ ├── types.go
│ └── zero.go
├── sqlx/
│ ├── sqlx.go
│ ├── sqlx_test.go
│ ├── struct_row.go
│ └── util.go
└── timex/
├── weekday.go
└── weekday_test.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .deepsource.toml
================================================
version = 1
test_patterns = ["**/*_test.go"]
exclude_patterns = [
"_examples/**",
"_benchmarks/**",
".github/**"
]
[[analyzers]]
name = "go"
enabled = true
[analyzers.meta]
import_paths = ["github.com/kataras/iris/v12"]
================================================
FILE: .fossa.yml
================================================
version: 3
cli:
server: https://app.fossa.com
fetcher: git
package: github.com/kataras/iris
project: github.com/kataras/iris
analyze:
modules:
- name: iris
type: go
target: .
path: .
================================================
FILE: .gitattributes
================================================
*.go linguist-language=Go
_examples/* linguist-documentation
_benchmarks/* linguist-documentation
go.sum linguist-generated
# Set the default behavior, in case people don't have core.autocrlf set.
# if from windows:
# git config --global core.autocrlf true
# if from unix:
# git config --global core.autocrlf input
# https://help.github.com/articles/dealing-with-line-endings/#per-repository-settings
* text=auto
# ignore perms
# git config core.filemode false
================================================
FILE: .github/CODEOWNERS
================================================
# These owners will be the default owners for everything in the repo.
* @kataras
================================================
FILE: .github/FUNDING.yml
================================================
# 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
# custom: https://iris-go.com/donate # Replace with a single custom sponsorship URL
github: kataras
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: type:bug
assignees: kataras
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. [...]
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. ubuntu, windows]
**iris.Version**
- e.g. v12.2.5 or main
Please make sure the bug is reproducible over the `main` branch:
```sh
$ cd PROJECT
$ go get -u github.com/kataras/iris/v12@main
$ go run .
```
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/custom.md
================================================
---
name: Custom issue template
about: Other
title: ''
labels: ''
assignees: ''
---
Describe the issue you are facing or ask for help
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE REQUEST]"
labels: type:idea
assignees: kataras
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
Examples for the Iris project can be found at
<https://github.com/kataras/iris/tree/main/_examples>.
Documentation for the Iris project can be found at
<https://www.iris-go.com/docs>.
Love iris? Please consider supporting the project:
👉 https://iris-go.com/donate
Care to be part of a larger community? Fill our user experience form:
👉 https://goo.gl/forms/lnRbVgA6ICTkPyk02
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
# We'd love to see more contributions
Read how you can [contribute to the project](https://github.com/kataras/iris/blob/main/CONTRIBUTING.md).
> Please attach an [issue](https://github.com/kataras/iris/issues) link which your PR solves otherwise your work may be rejected.
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "gomod"
directory: "/"
exclude-paths:
- "_examples/"
schedule:
interval: "monthly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
================================================
FILE: .github/scripts/setup_examples_test.bash
================================================
#!/usr/bin/env bash
for f in ../../_examples/*; do
if [ -d "$f" ]; then
# Will not run if no directories are available
go mod init
go get -u github.com/kataras/iris/v12@main
go mod download
go run .
fi
done
# git update-index --chmod=+x ./.github/scripts/setup_examples_test.bash
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
jobs:
test:
name: Test
runs-on: ubuntu-latest
strategy:
matrix:
go_version: [1.25.x]
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v6
- name: Set up Go 1.x
uses: actions/setup-go@v6
with:
go-version-file: './go.mod'
check-latest: true
- run: go version
- name: Test
run: go test -v ./...
- name: Setup examples for testing
run: ./.github/scripts/setup_examples_test.bash
- name: Test examples
continue-on-error: true
working-directory: _examples
run: go test -v -mod=mod -cover -race ./...
================================================
FILE: .github/workflows/codeql-analysis.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"
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '24 11 * * 6'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'go']
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Go 1.x
uses: actions/setup-go@v6
with:
go-version-file: './go.mod'
check-latest: true
- run: go version
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# 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.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .gitignore
================================================
.idea
.vscode
.directory
coverage.out
package-lock.json
access.log
node_modules
issue-*/
internalcode-*/
/_examples/feature-*/
_examples/**/uploads/*
_issues/**
.DS_STORE
================================================
FILE: AUTHORS
================================================
# This is the official list of Iris authors for copyright
# purposes.
Gerasimos Maropoulos <kataras2006@hotmail.com>
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at kataras2006@hotmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
First of all read our [Code of Conduct](https://github.com/kataras/iris/blob/main/CODE_OF_CONDUCT.md).
## PR
1. Open a new [issue](https://github.com/kataras/iris/issues/new)
* Write version of your local Iris.
* Write version of your local Go programming language.
* Describe your problem, what did you expect to see and what you see instead.
* If it's a feature request, describe your idea as better as you can
* optionally, navigate to the [chat](https://chat.iris-go.com) to push other members to participate and share their thoughts about your brilliant idea.
2. Fork the [repository](https://github.com/kataras/iris).
3. Make your changes.
4. Compare & Push the PR from [here](https://github.com/kataras/iris/compare).
## Translate
We need your help with translations into your native language.
Iris needs your help, please think about contributing to the translation of the [README](README.md) and https://iris-go.com, you will be rewarded.
Instructions can be found at: https://github.com/kataras/iris/issues/796
## Share
### Writing
Write an article about Iris in https://medium.com, https://dev.to or if you're being a hackathon at https://hackernoon.com and send us the link on iris-go@outlook.com.
### Social networks
If you're part of any social network, do a post(or tweet if twitter) about Iris and what you love about it, many examples can be found, the most recent one is [that](https://twitter.com/DorMoshe/status/1154486477247508480).
================================================
FILE: FAQ.md
================================================
# FAQ
## [](https://github.com/kataras/iris)
Add a `badge` to your open-source projects powered by [Iris](https://iris-go.com) by pasting the below code snippet to the project repo's README.md:
```md
[](https://github.com/kataras/iris)
```
## Editors & IDEs Extensions
### Visual Studio Code <a href="https://marketplace.visualstudio.com/items?itemName=kataras2006.iris"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Visual_Studio_Code_1.18_icon.svg/2000px-Visual_Studio_Code_1.18_icon.svg.png" height="20px" width="20px" /></a>
<https://marketplace.visualstudio.com/items?itemName=kataras2006.iris>
> Please feel free to list your own Iris extension(s) here by [PR](https://github.com/kataras/iris/pulls)
## How to upgrade
```sh
go get github.com/kataras/iris/v12@latest
```
Go version 1.20 and above is required.
## Learning
More than 280 practical examples, tutorials and articles at:
- https://www.iris-go.com/docs
- https://www.iris-go.com/#ebookDonateForm
<!-- - https://github.com/kataras/iris/wiki/Starter-kits -->
- https://github.com/kataras/iris/tree/main/_examples
- https://pkg.go.dev/github.com/kataras/iris/v12@main
## Active development mode
Iris may have reached version 12, but we're not stopping there. We have many feature ideas on our board that we're anxious to add and other innovative web development solutions that we're planning to build into Iris.
## Can I find a job if I learn how to use Iris?
Yes, not only because you will learn Golang in the same time, but there are some positions
open for Iris-specific developers the time we speak.
Go to our facebook page, like it and receive notifications about new job offers, we already have couple of them stay at the top of the page: https://www.facebook.com/iris.framework
## Do we have a Community chat?
Yes, https://chat.iris-go.com
## How is the development of Iris economically supported?
By people like you, who help us by donating small or large amounts of money.
Help this project deliver awesome and unique features with the highest possible code quality by donating any amount via [PayPal or Stripe](https://iris-go.com/donate). Your name will be published [here](https://www.iris-go.com/#review) after your approval via e-mail.
================================================
FILE: HISTORY.md
================================================
# Changelog
### Looking for free and real-time support?
https://github.com/kataras/iris/issues
https://chat.iris-go.com
### Looking for previous versions?
https://github.com/kataras/iris/releases
### Want to be hired?
https://facebook.com/iris.framework
### Should I upgrade my Iris?
Developers are not forced to upgrade if they don't really need it. Upgrade whenever you feel ready.
**How to upgrade**: Open your command-line and execute this command: `go get github.com/kataras/iris/v12@latest` and `go mod tidy -compat=1.21`.
# Next
Changes apply to `main` branch.
# Thu, 25 April 2024 | v12.2.11
Dear Iris Community,
You might have noticed a recent lull in activity on the Iris repository. I want to assure you that this silence is not without reason. For the past **3-4 months**, I've been diligently working on the next major release of Iris.
This upcoming version is poised to be a significant leap forward, fully embracing the **Generics** feature introduced in Go. We're not just stopping at Generics, though. Expect a suite of **new features**, **enhancements**, and **optimizations** that will elevate your development experience to new heights.
My journey with Go spans over **8 years**, and with each year, my expertise and understanding of the language deepen. This accumulated knowledge is being poured into Iris, ensuring that the framework not only evolves with the language but also with the community's growing needs.
Stay tuned for more updates, and thank you for your continued support and patience. The wait will be worth it.
Warm regards,<br/>
Gerasimos (Makis) Maropoulos
### This is the last release for the version 12 family.
- Security improvements and dependencies upgrade.
- New `Application/Party.MiddlewareExists(handlerNameOrHandler)` method added, example:
```go
package main
import (
"fmt"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/x/errors"
)
func main() {
app := iris.New()
app.UseRouter(errors.RecoveryHandler)
if app.MiddlewareExists(errors.RecoveryHandler) { // <- HERE.
fmt.Println("errors.RecoveryHandler exists")
}
// OR:
// if app.MiddlewareExists("iris.errors.recover") {
// fmt.Println("Iris.Errors.Recovery exists")
// }
app.Get("/", indexHandler)
app.Listen(":8080")
}
func indexHandler(ctx iris.Context) {
panic("an error here")
ctx.HTML("<h1>Index</h1>")
}
```
- New `x/errors.Intercept(func(ctx iris.Context, req *CreateRequest, resp *CreateResponse) error{ ... })` package-level function.
```go
func main() {
app := iris.New()
// Create a new service and pass it to the handlers.
service := new(myService)
app.Post("/", errors.Intercept(responseHandler), errors.CreateHandler(service.Create))
// [...]
}
func responseHandler(ctx iris.Context, req *CreateRequest, resp *CreateResponse) error {
fmt.Printf("intercept: request got: %+v\nresponse sent: %#+v\n", req, resp)
return nil
}
```
- Rename `x/errors/ContextValidator.ValidateContext(iris.Context) error` to `x/errors/RequestHandler.HandleRequest(iris.Context) error`.
# Thu, 18 Jan 2024 | v12.2.10
- Simplify the `/core/host` subpackage and remove its `DeferFlow` and `RestoreFlow` methods. These methods are replaced with: `Supervisor.Configure(host.NonBlocking())` before `Serve` and ` Supervisor.Wait(context.Context) error` after `Serve`.
- Fix internal `trimHandlerName` and other minor stuff.
- New `iris.NonBlocking()` configuration option to run the server without blocking the main routine, `Application.Wait(context.Context) error` method can be used to block and wait for the server to be up and running. Example:
```go
func main() {
app := iris.New()
app.Get("/", func(ctx iris.Context) {
ctx.Writef("Hello, %s!", "World")
})
app.Listen(":8080", iris.NonBlocking(), iris.WithoutServerError(iris.ErrServerClosed))
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
if err := app.Wait(ctx); err != nil {
log.Fatal(err)
}
// [Server is up and running now, you may continue with other functions below].
}
```
- Add `x/mathx.RoundToInteger` math helper function.
# Wed, 10 Jan 2024 | v12.2.9
- Add `x/errors.RecoveryHandler` package-level function.
- Add `x/errors.Validation` package-level function to add one or more validations for the request payload before a service call of the below methods.
- Add `x/errors.Handler`, `CreateHandler`, `NoContentHandler`, `NoContentOrNotModifiedHandler` and `ListHandler` ready-to-use handlers for service method calls to Iris Handler.
- Add `x/errors.List` package-level function to support `ListObjects(ctx context.Context, opts pagination.ListOptions, f Filter) ([]Object, int64, error)` type of service calls.
- Simplify how validation errors on `/x/errors` package works. A new `x/errors/validation` sub-package added to make your life easier (using the powerful Generics feature).
- Add `x/errors.OK`, `Create`, `NoContent` and `NoContentOrNotModified` package-level generic functions as custom service method caller helpers. Example can be found [here](_examples/routing/http-wire-errors/service/main.go).
- Add `x/errors.ReadPayload`, `ReadQuery`, `ReadPaginationOptions`, `Handle`, `HandleCreate`, `HandleCreateResponse`, `HandleUpdate` and `HandleDelete` package-level functions as helpers for common actions.
- Add `x/jsonx.GetSimpleDateRange(date, jsonx.WeekRange, time.Monday, time.Sunday)` which returns all dates between the given range and start/end weekday values for WeekRange.
- Add `x/timex.GetMonthDays` and `x/timex.GetMonthEnd` functions.
- Add `iris.CookieDomain` and `iris.CookieOverride` cookie options to handle [#2309](https://github.com/kataras/iris/issues/2309).
- New `x/errors.ErrorCodeName.MapErrorFunc`, `MapErrors`, `Wrap` methods and `x/errors.HandleError` package-level function.
# Sun, 05 Nov 2023 | v12.2.8
- A new way to customize the handler's parameter among with the `hero` and `mvc` packages. New `iris.NewContextWrapper` and
`iris.NewContextPool` methods were added to wrap a handler (`.Handler`, `.Handlers`, `.HandlerReturnError`, `HandlerReturnDuration`, `Filter` and `FallbackViewFunc` methods) and use a custom context instead of the iris.Context directly. Example at: https://github.com/kataras/iris/tree/main/_examples/routing/custom-context.
- The `cache` sub-package has an update, 4 years after:
- Add support for custom storage on `cache` package, through the `Handler#Store` method.
- Add support for custom expiration duration on `cache` package, trough the `Handler#MaxAge` method.
- Improve the overral performance of the `cache` package.
- The `cache.Handler` input and output arguments remain as it is.
- The `cache.Cache` input argument changed from `time.Duration` to `func(iris.Context) time.Duration`.
# Mon, 25 Sep 2023 | v12.2.7
Minor bug fixes and support of multiple `block` and `define` directives in multiple layouts and templates in the `Blocks` view engine.
# Mon, 21 Aug 2023 | v12.2.5
- Add optional `Singleton() bool` method to controllers to mark them as singleton, will panic with a specific error if a controller expects dynamic dependencies. This behavior is idendical to the app-driven `app.EnsureStaticBindings()`.
- Non-zero fields of a controller that are marked as ignored, with `ignore:"true"` field tag, they are not included in the dependencies at all now.
- Re-add error log on context rich write (e.g. JSON) failures when the application is running under debug mode (with `app.Logger().SetLevel("debug")`) and there is no a registered context error handler at place.
- `master` branch finally renamed to `main`. Don't worry GitHub will still navigate any `master` request to `main` automatically. Examples, Documentation and other Pages are refactored too.
# Sat, 12 Aug 2023 | v12.2.4
- Add new `iris.WithDynamicHandler` option (`EnableDynamicHandler` setting) to work with `iris.Application.RefreshRouter` method. It allows to change the entire router while your server is up and running. Handles [issue #2167](https://github.com/kataras/iris/issues/2167). Example at [_examples/routing/route-state/main.go](_examples/routing/route-state/main.go).
> We jumped v12.2.2 and v12.2.3.
# Mon, 17 July 2023 | v12.2.1
- Add `mvc.Application.EnableStructDependents()` method to handle [#2158](https://github.com/kataras/iris/issues/2158).
- Fix [iris-premium#17](https://github.com/kataras/iris-premium/issues/17).
- Replace [russross/blackfriday](github.com/russross/blackfriday/v2) with [gomarkdown](https://github.com/gomarkdown/markdown) as requested at [#2098](https://github.com/kataras/iris/issues/2098).
- Add `mvc.IgnoreEmbedded` option to handle [#2103](https://github.com/kataras/iris/issues/2103). Example Code:
```go
func configure(m *mvc.Application) {
m.Router.Use(cacheHandler)
m.Handle(&exampleController{
timeFormat: "Mon, Jan 02 2006 15:04:05",
}, mvc.IgnoreEmbedded /* BaseController.GetDoSomething will not be parsed at all */)
}
type BaseController struct {
Ctx iris.Context
}
func (c *BaseController) GetDoSomething(i any) error {
return nil
}
type exampleController struct {
BaseController
timeFormat string
}
func (c *exampleController) Get() string {
now := time.Now().Format(c.timeFormat)
return "last time executed without cache: " + now
}
```
- Add `LoadKV` method on `Iris.Application.I18N` instance. It should be used when no locale files are available. It loads locales via pure Go Map (or database decoded values).
- Remove [ace](https://github.com/eknkc/amber) template parser support, as it was discontinued by its author more than five years ago.
# Sa, 11 March 2023 | v12.2.0
This release introduces new features and some breaking changes.
The codebase for Dependency Injection, Internationalization and localization and more have been simplified a lot (fewer LOCs and easier to read and follow up).
## 24 Dec 2022
All new features have been tested in production and seem to work fine. Fixed all reported and reproducible bugs. The `v12.2.0-beta7` is the latest beta release of v12.2.0. Expect the final public and stable release of v12.2.0 shortly after February 2023.
## Fixes and Improvements
- Add `iris.TrimParamFilePart` to handle cases like [#2024](https://github.com/kataras/iris/issues/2024) and improve the [_examples/routing/dynamic-path/main.go](_examples/routing/dynamic-path/main.go#L356) example to include that case as well.
- **Breaking-change**: HTML template functions `yield`, `part`, `partial`, `partial_r` and `render` now accept (and require for some cases) a second argument of the binding data context too. Convert: `{{ yield }}` to `{{ yield . }}`, `{{ render "templates/mytemplate.html" }}` to `{{ render "templates/mytemplate.html" . }}`, `{{ partial "partials/mypartial.html" }}` to `{{ partial "partials/mypartial.html" . }}` and so on.
- Add new `URLParamSeparator` to the configuration. Defaults to "," but can be set to an empty string to disable splitting query values on `Context.URLParamSlice` method.
- [PR #1992](https://github.com/kataras/iris/pull/1992): Added support for third party packages on [httptest](https://github.com/kataras/iris/tree/main/httptest). An example using 3rd-party module named [Ginkgo](github.com/onsi/ginkgo) can be found [here](https://github.com/kataras/iris/blob/main/_examples/testing/ginkgotest).
- Add `Context.Render` method for compatibility.
- Support of embedded [locale files](https://github.com/kataras/iris/blob/main/_examples/i18n/template-embedded/main.go) using standard `embed.FS` with the new `LoadFS` function.
- Support of direct embedded view engines (`HTML, Blocks, Django, Handlebars, Pug, Jet` and `Ace`) with `embed.FS` or `fs.FS` (in addition to `string` and `http.FileSystem` types).
- Add support for `embed.FS` and `fs.FS` on `app.HandleDir`.
- Add `iris.Patches()` package-level function to customize Iris Request Context REST (and more to come) behavior.
- Minor fixes.
- Enable setting a custom "go-redis" client through `SetClient` go redis driver method or `Client` struct field on sessions/database/redis driver as requested at [chat](https://chat.iris-go.com).
- Ignore `"csrf.token"` form data key when missing on `ctx.ReadForm` by default as requested at [#1941](https://github.com/kataras/iris/issues/1941).
- Fix [CVE-2020-5398](https://github.com/advisories/GHSA-8wx2-9q48-vm9r).
- New `{x:weekday}` path parameter type, example code:
```go
// 0 to 7 (leading zeros don't matter) or "Sunday" to "Monday" or "sunday" to "monday".
// http://localhost:8080/schedule/monday or http://localhost:8080/schedule/Monday or
// http://localhost:8080/schedule/1 or http://localhost:8080/schedule/0001.
app.Get("/schedule/{day:weekday}", func(ctx iris.Context) {
day, _ := ctx.Params().GetWeekday("day")
ctx.Writef("Weekday requested was: %v\n", day)
})
```
- Make the `Context.JSON` method customizable by modifying the `context.WriteJSON` package-level function.
- Add new `iris.NewGuide` which helps you build a simple and nice JSON API with services as dependencies and better design pattern.
- Make `Context.Domain()` customizable by letting developers to modify the `Context.GetDomain` package-level function.
- Remove Request Context-based Transaction feature as its usage can be replaced with just the Iris Context (as of go1.7+) and better [project](_examples/project) structure.
- Fix [#1882](https://github.com/kataras/iris/issues/1882)
- Fix [#1877](https://github.com/kataras/iris/issues/1877)
- Fix [#1876](https://github.com/kataras/iris/issues/1876)
- New `date` dynamic path parameter type. E.g. `/blog/{param:date}` matches to `"/blog/2022/04/21"`.
- Add `iris.AllowQuerySemicolons` and `iris.WithoutServerError(iris.ErrURLQuerySemicolon)` to handle golang.org/issue/25192 as reported at: https://github.com/kataras/iris/issues/1875.
- Add new `Application.SetContextErrorHandler` to globally customize the default behavior (status code 500 without body) on `JSON`, `JSONP`, `Protobuf`, `MsgPack`, `XML`, `YAML` and `Markdown` method call write errors instead of catching the error on each handler.
- Add new [x/pagination](x/pagination/pagination.go) sub-package which supports generics code (go 1.18+).
- Add new [middleware/modrevision](middleware/modrevision) middleware (example at [_examples/project/api/router.go]_examples/project/api/router.go).
- Add `iris.BuildRevision` and `iris.BuildTime` to embrace the new go's 1.18 debug build information.
- ~Add `Context.SetJSONOptions` to customize on a higher level the JSON options on `Context.JSON` calls.~ update: remains as it's, per JSON call.
- Add new [auth](auth) sub-package which helps on any user type auth using JWT (access & refresh tokens) and a cookie (optional).
- Add `Party.EnsureStaticBindings` which, if called, the MVC binder panics if a struct's input binding depends on the HTTP request data instead of a static dependency. This is useful to make sure your API crafted through `Party.PartyConfigure` depends only on struct values you already defined at `Party.RegisterDependency` == will never use reflection at serve-time (maximum performance).
- Add a new [x/sqlx](/x/sqlx/) sub-package ([example](_examples/database/sqlx/main.go)).
- Add a new [x/reflex](/x/reflex) sub-package.
- Add `Context.ReadMultipartRelated` as requested at: [issues/#1787](https://github.com/kataras/iris/issues/1787).
- Add `Container.DependencyMatcher` and `Dependency.Match` to implement the feature requested at [issues/#1842](https://github.com/kataras/iris/issues/1842).
- Register [CORS middleware](middleware/cors) to the Application by default when `iris.Default()` is used instead of `iris.New()`.
- Add [x/jsonx: DayTime](/x/jsonx/day_time.go) for JSON marshal and unmarshal of "15:04:05" (hour, minute, second).
- Fix a bug of `WithoutBodyConsumptionOnUnmarshal` configurator and a minor dependency injection issue caused by the previous alpha version between 20 and 26 February of 2022.
- New basic [cors middleware](middleware/cors).
- New `httptest.NewServer` helper.
- New [x/errors](x/errors) sub-package, helps with HTTP Wire Errors. Example can be found [here](_examples/routing/http-wire-errors/main.go).
- New [x/timex](x/timex) sub-package, helps working with weekdays.
- Minor improvements to the [JSON Kitchen Time](x/jsonx/kitchen_time.go).
- A session database can now implement the `EndRequest(ctx *context.Context, session *Session)` method which will be fired at the end of the request-response lifecycle.
- Improvements on JSON and ReadJSON when `Iris.Configuration.EnableOptimizations` is true. The request's Context is used whenever is necessary.
- New [monitor](_examples/monitor/monitor-middleware/main.go) middleware.
- New `RegisterRequestHandler` package-level and client methods to the new `x/client` package. Control or log the request-response lifecycle.
- New `RateLimit` and `Debug` HTTP Client options to the new `x/client` package.
- Push a security fix reported by [Kirill Efimov](https://github.com/kirill89) for older go runtimes.
- New `Configuration.Timeout` and `Configuration.TimeoutMessage` fields. Use it to set HTTP timeouts. Note that your http server's (`Application.ConfigureHost`) Read/Write timeouts should be a bit higher than the `Configuration.Timeout` in order to give some time to http timeout handler to kick in and be able to send the `Configuration.TimeoutMessage` properly.
- New `apps.OnApplicationRegistered` method which listens on new Iris applications hosted under the same binary. Use it on your `init` functions to configure Iris applications by any spot in your project's files.
- `Context.JSON` respects any object implements the `easyjson.Marshaler` interface and renders the result using the [easyjon](https://github.com/mailru/easyjson)'s writer. **Set** the `Configuration.EnableProtoJSON` and `Configuration.EnableEasyJSON` to true in order to enable this feature.
- minor: `Context` structure implements the standard go Context interface now (includes: Deadline, Done, Err and Value methods). Handlers can now just pass the `ctx iris.Context` as a shortcut of `ctx.Request().Context()` when needed.
- New [x/jsonx](x/jsonx) sub-package for JSON type helpers.
- New [x/mathx](x/mathx) sub-package for math related functions.
- New [/x/client](x/client) HTTP Client sub-package.
- New `email` builtin path parameter type. Example:
```go
// +------------------------+
// | {param:email} |
// +------------------------+
// Email + mx look up path parameter validation. Use it on production.
// http://localhost:8080/user/kataras2006@hotmail.com -> OK
// http://localhost:8080/user/b-c@invalid_domain -> NOT FOUND
app.Get("/user/{user_email:email}", func(ctx iris.Context) {
email := ctx.Params().Get("user_email")
ctx.WriteString(email)
})
// +------------------------+
// | {param:mail} |
// +------------------------+
// Simple email path parameter validation.
// http://localhost:8080/user/kataras2006@hotmail.com -> OK
// http://localhost:8080/user/b-c@invalid_domainxxx1.com -> NOT FOUND
app.Get("/user/{local_email:mail}", func(ctx iris.Context) {
email := ctx.Params().Get("local_email")
ctx.WriteString(email)
})
```
- New `iris.IsErrEmptyJSON(err) bool` which reports whether the given "err" is caused by a
`Context.ReadJSON` call when the request body didn't start with { (or it was totally empty).
Example Code:
```go
func handler(ctx iris.Context) {
var opts SearchOptions
if err := ctx.ReadJSON(&opts); err != nil && !iris.IsErrEmptyJSON(err) {
ctx.StopWithJSON(iris.StatusBadRequest, iris.Map{"message": "unable to parse body"})
return
}
// [...continue with default values of "opts" struct if the client didn't provide some]
}
```
That means that the client can optionally set a JSON body.
- New `APIContainer.EnableStrictMode(bool)` to disable automatic payload binding and panic on missing dependencies for exported struct'sfields or function's input parameters on MVC controller or hero function or PartyConfigurator.
- New `Party.PartyConfigure(relativePath string, partyReg ...PartyConfigurator) Party` helper, registers a children Party like `Party` and `PartyFunc` but instead it accepts a structure value which may contain one or more of the dependencies registered by `RegisterDependency` or `ConfigureContainer().RegisterDependency` methods and fills the unset/zero exported struct's fields respectfully (useful when the api's dependencies amount are too much to pass on a function).
- **New feature:** add the ability to set custom error handlers on path type parameters errors (existing or custom ones). Example Code:
```go
app.Macros().Get("uuid").HandleError(func(ctx iris.Context, paramIndex int, err error) {
ctx.StatusCode(iris.StatusBadRequest)
param := ctx.Params().GetEntryAt(paramIndex)
ctx.JSON(iris.Map{
"error": err.Error(),
"message": "invalid path parameter",
"parameter": param.Key,
"value": param.ValueRaw,
})
})
app.Get("/users/{id:uuid}", getUser)
```
- Improve the performance and fix `:int, :int8, :int16, :int32, :int64, :uint, :uint8, :uint16, :uint32, :uint64` path type parameters couldn't accept a positive number written with the plus symbol or with a leading zeroes, e.g. `+42` and `021`.
- The `iris.WithEmptyFormError` option is respected on `context.ReadQuery` method too, as requested at [#1727](https://github.com/kataras/iris/issues/1727). [Example comments](https://github.com/kataras/iris/blob/main/_examples/request-body/read-query/main.go) were updated.
- New `httptest.Strict` option setter to enable the `httpexpect.RequireReporter` instead of the default `httpexpect.AssetReporter. Use that to enable complete test failure on the first error. As requested at: [#1722](https://github.com/kataras/iris/issues/1722).
- New `uuid` builtin path parameter type. Example:
```go
// +------------------------+
// | {param:uuid} |
// +------------------------+
// UUIDv4 (and v1) path parameter validation.
// http://localhost:8080/user/bb4f33e4-dc08-40d8-9f2b-e8b2bb615c0e -> OK
// http://localhost:8080/user/dsadsa-invalid-uuid -> NOT FOUND
app.Get("/user/{id:uuid}", func(ctx iris.Context) {
id := ctx.Params().Get("id")
ctx.WriteString(id)
})
```
- New `Configuration.KeepAlive` and `iris.WithKeepAlive(time.Duration) Configurator` added as helpers to start the server using a tcp listener featured with keep-alive.
- New `DirOptions.ShowHidden bool` is added by [@tuhao1020](https://github.com/tuhao1020) at [PR #1717](https://github.com/kataras/iris/pull/1717) to show or hide the hidden files when `ShowList` is set to true.
- New `Context.ReadJSONStream` method and `JSONReader` options for `Context.ReadJSON` and `Context.ReadJSONStream`, see the [example](_examples/request-body/read-json-stream/main.go).
- New `FallbackView` feature, per-party or per handler chain. Example can be found at: [_examples/view/fallback](_examples/view/fallback).
```go
app.FallbackView(iris.FallbackViewFunc(func(ctx iris.Context, err iris.ErrViewNotExist) error {
// err.Name is the previous template name.
// err.IsLayout reports whether the failure came from the layout template.
// err.Data is the template data provided to the previous View call.
// [...custom logic e.g. ctx.View("fallback.html", err.Data)]
return err
}))
```
- New `versioning.Aliases` middleware and up to 80% faster version resolve. Example Code:
```go
app := iris.New()
api := app.Party("/api")
api.Use(Aliases(map[string]string{
versioning.Empty: "1", // when no version was provided by the client.
"beta": "4.0.0",
"stage": "5.0.0-alpha"
}))
v1 := NewGroup(api, ">=1.0.0 <2.0.0")
v1.Get/Post...
v4 := NewGroup(api, ">=4.0.0 <5.0.0")
v4.Get/Post...
stage := NewGroup(api, "5.0.0-alpha")
stage.Get/Post...
```
- New [Basic Authentication](https://github.com/kataras/iris/tree/main/middleware/basicauth) middleware. Its `Default` function has not changed, however, the rest, e.g. `New` contains breaking changes as the new middleware features new functionalities.
- Add `iris.DirOptions.SPA bool` field to allow [Single Page Applications](https://github.com/kataras/iris/tree/main/_examples/file-server/single-page-application/basic/main.go) under a file server.
- A generic User interface, see the `Context.SetUser/User` methods in the New Context Methods section for more. In-short, the basicauth middleware's stored user can now be retrieved through `Context.User()` which provides more information than the native `ctx.Request().BasicAuth()` method one. Third-party authentication middleware creators can benefit of these two methods, plus the Logout below.
- A `Context.Logout` method is added, can be used to invalidate [basicauth](https://github.com/kataras/iris/blob/main/_examples/auth/basicauth/basic/main.go) or [jwt](https://github.com/kataras/iris/blob/main/_examples/auth/jwt/blocklist/main.go) client credentials.
- Add the ability to [share functions](https://github.com/kataras/iris/tree/main/_examples/routing/writing-a-middleware/share-funcs) between handlers chain and add an [example](https://github.com/kataras/iris/tree/main/_examples/routing/writing-a-middleware/share-services) on sharing Go structures (aka services).
- Add the new `Party.UseOnce` method to the `*Route`
- Add a new `*Route.RemoveHandler(...any) int` and `Party.RemoveHandler(...any) Party` methods, delete a handler based on its name or the handler pc function.
```go
func middleware(ctx iris.Context) {
// [...]
}
func main() {
app := iris.New()
// Register the middleware to all matched routes.
app.Use(middleware)
// Handlers = middleware, other
app.Get("/", index)
// Handlers = other
app.Get("/other", other).RemoveHandler(middleware)
}
```
- Redis Driver is now based on the [go-redis](https://github.com/go-redis/redis/) module. Radix and redigo removed entirely. Sessions are now stored in hashes which fixes [issue #1610](https://github.com/kataras/iris/issues/1610). The only breaking change on default configuration is that the `redis.Config.Delim` option was removed. The redis sessions database driver is now defaults to the `&redis.GoRedisDriver{}`. End-developers can implement their own implementations too. The `Database#Close` is now automatically called on interrupt signals, no need to register it by yourself.
- Add builtin support for **[i18n pluralization](https://github.com/kataras/iris/tree/main/_examples/i18n/plurals)**. Please check out the [following yaml locale example](https://github.com/kataras/iris/tree/main/_examples/i18n/plurals/locales/en-US/welcome.yml) to see an overview of the supported formats.
- Fix [#1650](https://github.com/kataras/iris/issues/1650)
- Fix [#1649](https://github.com/kataras/iris/issues/1649)
- Fix [#1648](https://github.com/kataras/iris/issues/1648)
- Fix [#1641](https://github.com/kataras/iris/issues/1641)
- Add `Party.SetRoutesNoLog(disable bool) Party` to disable (the new) verbose logging of next routes.
- Add `mvc.Application.SetControllersNoLog(disable bool) *mvc.Application` to disable (the new) verbose logging of next controllers. As requested at [#1630](https://github.com/kataras/iris/issues/1630).
- Fix [#1621](https://github.com/kataras/iris/issues/1621) and add a new `cache.WithKey` to customize the cached entry key.
- Add a `Response() *http.Response` to the Response Recorder.
- Fix Response Recorder `Flush` when transfer-encoding is `chunked`.
- Fix Response Recorder `Clone` concurrent access afterwards.
- Add a `ParseTemplate` method on view engines to manually parse and add a template from a text as [requested](https://github.com/kataras/iris/issues/1617). [Examples](https://github.com/kataras/iris/tree/main/_examples/view/parse-template).
- Full `http.FileSystem` interface support for all **view** engines as [requested](https://github.com/kataras/iris/issues/1575). The first argument of the functions(`HTML`, `Blocks`, `Pug`, `Ace`, `Jet`, `Django`, `Handlebars`) can now be either a directory of `string` type (like before) or a value which completes the `http.FileSystem` interface. The `.Binary` method of all view engines was removed: pass the go-bindata's latest version `AssetFile()` exported function as the first argument instead of string.
- Add `Route.ExcludeSitemap() *Route` to exclude a route from sitemap as requested in [chat](https://chat.iris-go.com), also offline routes are excluded automatically now.
- Improved tracing (with `app.Logger().SetLevel("debug")`) for routes. Screens:
#### DBUG Routes (1)

#### DBUG Routes (2)

#### DBUG Routes (3)

- Update the [pprof middleware](https://github.com/kataras/iris/tree/main/middleware/pprof).
- New `Controller.HandleHTTPError(mvc.Code) <T>` optional Controller method to handle http errors as requested at: [MVC - More Elegent OnErrorCode registration?](https://github.com/kataras/iris/issues/1595). Example can be found [here](https://github.com/kataras/iris/tree/main/_examples/mvc/error-handler-http/main.go).

- New [Rewrite Engine Middleware](https://github.com/kataras/iris/tree/main/middleware/rewrite). Set up redirection rules for path patterns using the syntax we all know. [Example Code](https://github.com/kataras/iris/tree/main/_examples/routing/rewrite).
```yml
RedirectMatch: # REDIRECT_CODE_DIGITS | PATTERN_REGEX | TARGET_REPL
# Redirects /seo/* to /*
- 301 /seo/(.*) /$1
# Redirects /docs/v12* to /docs
- 301 /docs/v12(.*) /docs
# Redirects /old(.*) to /
- 301 /old(.*) /
# Redirects http or https://test.* to http or https://newtest.*
- 301 ^(http|https)://test.(.*) $1://newtest.$2
# Handles /*.json or .xml as *?format=json or xml,
# without redirect. See /users route.
# When Code is 0 then it does not redirect the request,
# instead it changes the request URL
# and leaves a route handle the request.
- 0 /(.*).(json|xml) /$1?format=$2
# Redirects root domain to www.
# Creation of a www subdomain inside the Application is unnecessary,
# all requests are handled by the root Application itself.
PrimarySubdomain: www
```
- New `TraceRoute bool` on [middleware/logger](https://github.com/kataras/iris/tree/main/middleware/logger) middleware. Displays information about the executed route. Also marks the handlers executed. Screenshot:

- Implement feature request [Log when I18n Translation Fails?](https://github.com/kataras/iris/issues/1593) by using the new `Application.I18n.DefaultMessageFunc` field **before** `I18n.Load`. [Example of usage](https://github.com/kataras/iris/blob/main/_examples/i18n/basic/main.go#L28-L50).
- Fix [#1594](https://github.com/kataras/iris/issues/1594) and add a new `PathAfterHandler` which can be set to true to enable the old behavior (not recommended though).
- New [apps](https://github.com/kataras/iris/tree/main/apps) subpackage. [Example of usage](https://github.com/kataras/iris/tree/main/_examples/routing/subdomains/redirect/multi-instances).

- Fix `AutoTLS` when used with `iris.TLSNoRedirect` [*](https://github.com/kataras/iris/issues/1577). The `AutoTLS` runner can be customized through the new `iris.AutoTLSNoRedirect` instead, read its go documentation. Example of having both TLS and non-TLS versions of the same application without conflicts with letsencrypt `./well-known` path:

```go
package main
import (
"net/http"
"time"
"github.com/kataras/iris/v12"
)
func main() {
app := iris.New()
app.Logger().SetLevel("debug")
app.Get("/", func(ctx iris.Context) {
ctx.JSON(iris.Map{
"time": time.Now().Unix(),
"tls": ctx.Request().TLS != nil,
})
})
var fallbackServer = func(acme func(http.Handler) http.Handler) *http.Server {
srv := &http.Server{Handler: acme(app)}
go srv.ListenAndServe()
return srv
}
app.Run(iris.AutoTLS(":443", "example.com", "mail@example.com",
iris.AutoTLSNoRedirect(fallbackServer)))
}
```
- `iris.Minify` middleware to minify responses based on their media/content-type.
- `Context.OnCloseErr` and `Context.OnConnectionCloseErr` - to call a function of `func() error` instead of an `iris.Handler` when request is closed or manually canceled.
- `Party.UseError(...Handler)` - to register handlers to run before any http errors (e.g. before `OnErrorCode/OnAnyErrorCode` or default error codes when no handler is responsible to handle a specific http status code).
- `Party.UseRouter(...Handler) and Party.ResetRouterFilters()` - to register handlers before the main router, useful on handlers that should control whether the router itself should ran or not. Independently of the incoming request's method and path values. These handlers will be executed ALWAYS against ALL incoming matched requests. Example of use-case: CORS.
- `*versioning.Group` type is a full `Party` now.
- `Party.UseOnce` - either inserts a middleware, or on the basis of the middleware already existing, replace that existing middleware instead.
- Ability to register a view engine per group of routes or for the current chain of handlers through `Party.RegisterView` and `Context.ViewEngine` respectfully.
- Add [Blocks](_examples/view/template_blocks_0) template engine. <!-- Reminder for @kataras: follow https://github.com/flosch/pongo2/pull/236#issuecomment-668950566 discussion so we can get back on using the original pongo2 repository as they fixed the issue about an incompatible 3rd party package (although they need more fixes, that's why I commented there) -->
- Add [Ace](_examples/view/template_ace_0) template parser to the view engine and other minor improvements.
- Fix huge repo size of 55.7MB, which slows down the overall Iris installation experience. Now, go-get performs ~3 times faster. I 've managed it using the [bfg-repo-cleaner](https://github.com/rtyley/bfg-repo-cleaner) tool - an alternative to git-filter-branch command. Watch the small gif below to learn how:
[](https://media.giphy.com/media/U8560aiWTurW4iAOLn/giphy.gif)
- [gRPC](https://grpc.io/) features:
- New Router [Wrapper](middleware/grpc).
- New MVC `.Handle(ctrl, mvc.GRPC{...})` option which allows to register gRPC services per-party (without the requirement of a full wrapper) and optionally strict access to gRPC clients only, see the [example here](_examples/mvc/grpc-compatible).
- Add `Configuration.RemoteAddrHeadersForce bool` to force `Context.RemoteAddr() string` to return the first entry of request headers as a fallback instead of the `Request.RemoteAddr` one, as requested at: [1567#issuecomment-663972620](https://github.com/kataras/iris/issues/1567#issuecomment-663972620).
- Fix [#1569#issuecomment-663739177](https://github.com/kataras/iris/issues/1569#issuecomment-663739177).
- Fix [#1564](https://github.com/kataras/iris/issues/1564).
- Fix [#1553](https://github.com/kataras/iris/issues/1553).
- New `DirOptions.Cache` to cache assets in-memory among with their compressed contents (in order to be ready to served if client ask). Learn more about this feature by reading [all #1556 comments](https://github.com/kataras/iris/issues/1556#issuecomment-661057446). Usage:
```go
var dirOpts = DirOptions{
// [...other options]
Cache: DirCacheOptions{
Enable: true,
// Don't compress files smaller than 300 bytes.
CompressMinSize: 300,
// Ignore compress already compressed file types
// (some images and pdf).
CompressIgnore: iris.MatchImagesAssets,
// Gzip, deflate, br(brotli), snappy.
Encodings: []string{"gzip", "deflate", "br", "snappy"},
// Log to the stdout the total reduced file size.
Verbose: 1,
},
}
```
- New `DirOptions.PushTargets` and `PushTargetsRegexp` to push index' assets to the client without additional requests. Inspirated by issue [#1562](https://github.com/kataras/iris/issues/1562). Example matching all `.js, .css and .ico` files (recursively):
```go
var dirOpts = iris.DirOptions{
// [...other options]
IndexName: "/index.html",
PushTargetsRegexp: map[string]*regexp.Regexp{
"/": regexp.MustCompile("((.*).js|(.*).css|(.*).ico)$"),
// OR:
// "/": iris.MatchCommonAssets,
},
Compress: true,
}
```
- Update jet parser to v5.0.2, closes [#1551](https://github.com/kataras/iris/issues/1551). It contains two breaking changes by its author:
- Relative paths on `extends, import, include...` tmpl functions, e.g. `{{extends "../layouts/application.jet"}}` instead of `layouts/application.jet`
- the new [jet.Ranger](https://github.com/CloudyKit/jet/pull/165) interface now requires a `ProvidesIndex() bool` method too
- Example has been [updated](https://github.com/kataras/iris/tree/main/_examples/view/template_jet_0)
- Fix [#1552](https://github.com/kataras/iris/issues/1552).
- Proper listing of root directories on `Party.HandleDir` when its `DirOptions.ShowList` was set to true.
- Customize the file/directory listing page through views, see [example](https://github.com/kataras/iris/tree/main/_examples/file-server/file-server).
- Socket Sharding as requested at [#1544](https://github.com/kataras/iris/issues/1544). New `iris.WithSocketSharding` Configurator and `SocketSharding bool` setting.
- Versioned Controllers feature through the new `mvc.Version` option. See [_examples/mvc/versioned-controller](https://github.com/kataras/iris/blob/main/_examples/mvc/versioned-controller/main.go).
- Fix [#1539](https://github.com/kataras/iris/issues/1539).
- New [rollbar example](https://github.com/kataras/iris/blob/main/_examples/logging/rollbar/main.go).
- New builtin [requestid](https://github.com/kataras/iris/tree/main/middleware/requestid) middleware.
- New builtin [JWT](https://github.com/kataras/iris/tree/main/middleware/jwt) middleware based on the fastest JWT implementation; [kataras/jwt](https://github.com/kataras/jwt) featured with optional wire encryption to set claims with sensitive data when necessary.
- New `iris.RouteOverlap` route registration rule. `Party.SetRegisterRule(iris.RouteOverlap)` to allow overlapping across multiple routes for the same request subdomain, method, path. See [1536#issuecomment-643719922](https://github.com/kataras/iris/issues/1536#issuecomment-643719922). This allows two or more **MVC Controllers** to listen on the same path based on one or more registered dependencies (see [_examples/mvc/authenticated-controller](https://github.com/kataras/iris/tree/main/_examples/mvc/authenticated-controller)).
- `Context.ReadForm` now can return an `iris.ErrEmptyForm` instead of `nil` when the new `Configuration.FireEmptyFormError` is true (when `iris.WithEmptyFormError` is set) on missing form body to read from.
- `Configuration.EnablePathIntelligence | iris.WithPathIntelligence` to enable path intelligence automatic path redirection on the most closest path (if any), [example]((https://github.com/kataras/iris/blob/main/_examples/routing/intelligence/main.go)
- Enhanced cookie security and management through new `Context.AddCookieOptions` method and new cookie options (look on New Package-level functions section below), [securecookie](https://github.com/kataras/iris/tree/main/_examples/cookies/securecookie) example has been updated.
- `Context.RemoveCookie` removes also the Request's specific cookie of the same request lifecycle when `iris.CookieAllowReclaim` is set to cookie options, [example](https://github.com/kataras/iris/tree/main/_examples/cookies/options).
- `iris.TLS` can now accept certificates in form of raw `[]byte` contents too.
- `iris.TLS` registers a secondary http server which redirects "http://" to their "https://" equivalent requests, unless the new `iris.TLSNoRedirect` host Configurator is provided on `iris.TLS`, e.g. `app.Run(iris.TLS("127.0.0.1:443", "mycert.cert", "mykey.key", iris.TLSNoRedirect))`. There is `iris.AutoTLSNoRedirect` option for `AutoTLS` too.
- Fix an [issue](https://github.com/kataras/i18n/issues/1) about i18n loading from path which contains potential language code.
- Server will not return neither log the `ErrServerClosed` error if `app.Shutdown` was called manually via interrupt signal(CTRL/CMD+C), note that if the server closed by any other reason the error will be fired as previously (unless `iris.WithoutServerError(iris.ErrServerClosed)`).
- Finally, Log level's and Route debug information colorization is respected across outputs. Previously if the application used more than one output destination (e.g. a file through `app.Logger().AddOutput`) the color support was automatically disabled from all, including the terminal one, this problem is fixed now. Developers can now see colors in their terminals while log files are kept with clear text.
- New `iris.WithLowercaseRouting` option which forces all routes' paths to be lowercase and converts request paths to their lowercase for matching.
- New `app.Validator { Struct(any) error }` field and `app.Validate` method were added. The `app.Validator = ` can be used to integrate a 3rd-party package such as [go-playground/validator](https://github.com/go-playground/validator). If set-ed then Iris `Context`'s `ReadJSON`, `ReadXML`, `ReadMsgPack`, `ReadYAML`, `ReadForm`, `ReadQuery`, `ReadBody` methods will return the validation error on data validation failures. The [read-json-struct-validation](_examples/request-body/read-json-struct-validation) example was updated.
- A result of <T> can implement the new `hero.PreflightResult` interface which contains a single method of `Preflight(iris.Context) error`. If this method exists on a custom struct value which is returned from a handler then it will fire that `Preflight` first and if not errored then it will cotninue by sending the struct value as JSON(by-default) response body.
- `ctx.JSON, JSONP, XML`: if `iris.WithOptimizations` is NOT passed on `app.Run/Listen` then the indentation defaults to `" "` (four spaces) and `" "` respectfully otherwise it is empty or the provided value.
- Hero Handlers (and `app.ConfigureContainer().Handle`) do not have to require `iris.Context` just to call `ctx.Next()` anymore, this is done automatically now.
- Improve Remote Address parsing as requested at: [#1453](https://github.com/kataras/iris/issues/1453). Add `Configuration.RemoteAddrPrivateSubnets` to exclude those addresses when fetched by `Configuration.RemoteAddrHeaders` through `context.RemoteAddr() string`.
- Fix [#1487](https://github.com/kataras/iris/issues/1487).
- Fix [#1473](https://github.com/kataras/iris/issues/1473).
## New Package-level Variables
- `iris.DirListRichOptions` to pass on `iris.DirListRich` method.
- `iris.DirListRich` to override the default look and feel if the `DirOptions.ShowList` was set to true, can be passed to `DirOptions.DirList` field.
- `DirOptions.PushTargets` for http/2 push on index [*](https://github.com/kataras/iris/tree/main/_examples/file-server/http2push/main.go).
- `iris.Compression` middleware to compress responses and decode compressed request data respectfully.
- `iris.B, KB, MB, GB, TB, PB, EB` for byte units.
- `TLSNoRedirect` to disable automatic "http://" to "https://" redirections (see below)
- `CookieAllowReclaim`, `CookieAllowSubdomains`, `CookieSameSite`, `CookieSecure` and `CookieEncoding` to bring previously sessions-only features to all cookies in the request.
## New Context Methods
- `Context.FormFiles(key string, before ...func(*Context, *multipart.FileHeader) bool) (files []multipart.File, headers []*multipart.FileHeader, err error)` method.
- `Context.ReadURL(ptr any) error` shortcut of `ReadParams` and `ReadQuery`. Binds URL dynamic path parameters and URL query parameters to the given "ptr" pointer of a struct value.
- `Context.SetUser(User)` and `Context.User() User` to store and retrieve an authenticated client. Read more [here](https://github.com/iris-contrib/middleware/issues/63).
- `Context.SetLogoutFunc(fn any, persistenceArgs ...any)` and `Logout(args ...any) error` methods to allow different kind of auth middlewares to be able to set a "logout" a user/client feature with a single function, the route handler may not be aware of the implementation of the authentication used.
- `Context.SetFunc(name string, fn any, persistenceArgs ...any)` and `Context.CallFunc(name string, args ...any) ([]reflect.Value, error)` to allow middlewares to share functions dynamically when the type of the function is not predictable, see the [example](https://github.com/kataras/iris/tree/main/_examples/routing/writing-a-middleware/share-funcs) for more.
- `Context.TextYAML(any) error` same as `Context.YAML` but with set the Content-Type to `text/yaml` instead (Google Chrome renders it as text).
- `Context.IsDebug() bool` reports whether the application is running under debug/development mode. It is a shortcut of Application.Logger().Level >= golog.DebugLevel.
- `Context.IsRecovered() bool` reports whether the current request was recovered from the [recover middleware](https://github.com/kataras/iris/tree/main/middleware/recover). Also the `Context.GetErrPublic() (bool, error)`, `Context.SetErrPrivate(err error)` methods and `iris.ErrPrivate` interface have been introduced.
- `Context.RecordRequestBody(bool)` same as the Application's `DisableBodyConsumptionOnUnmarshal` configuration field but registers per chain of handlers. It makes the request body readable more than once.
- `Context.IsRecordingBody() bool` reports whether the request body can be readen multiple times.
- `Context.ReadHeaders(ptr any) error` binds request headers to "ptr". [Example](https://github.com/kataras/iris/blob/main/_examples/request-body/read-headers/main.go).
- `Context.ReadParams(ptr any) error` binds dynamic path parameters to "ptr". [Example](https://github.com/kataras/iris/blob/main/_examples/request-body/read-params/main.go).
- `Context.SaveFormFile(fh *multipart.FileHeader, dest string) (int64, error)` previously unexported. Accepts a result file of `Context.FormFile` and saves it to the disk.
- `Context.URLParamSlice(name string) []string` is a a shortcut of `ctx.Request().URL.Query()[name]`. Like `URLParam` but it returns all values as a string slice instead of a single string separated by commas. Note that it skips any empty values (e.g. https://iris-go.com?values=).
- `Context.PostValueMany(name string) (string, error)` returns the post data of a given key. The returned value is a single string separated by commas on multiple values. It also reports whether the form was empty or when the "name" does not exist or whether the available values are empty. It strips any empty key-values from the slice before return. See `ErrEmptyForm`, `ErrNotFound` and `ErrEmptyFormField` respectfully. The `PostValueInt`, `PostValueInt64`, `PostValueFloat64` and `PostValueBool` now respect the above errors too (the `PostValues` method now returns a second output argument of `error` too, see breaking changes below).
- `Context.URLParamsSorted() []memstore.StringEntry` returns a sorted (by key) slice of key-value entries of the URL Query parameters.
- `Context.ViewEngine(ViewEngine)` to set a view engine on-fly for the current chain of handlers, responsible to render templates through `ctx.View`. [Example](_examples/view/context-view-engine).
- `Context.SetErr(error)` and `Context.GetErr() error` helpers.
- `Context.CompressWriter(bool) error` and `Context.CompressReader(bool) error`.
- `Context.Clone() Context` returns a copy of the Context safe for concurrent access.
- `Context.IsCanceled() bool` reports whether the request has been canceled by the client.
- `Context.IsSSL() bool` reports whether the request is under HTTPS SSL (New `Configuration.SSLProxyHeaders` and `HostProxyHeaders` fields too).
- `Context.CompressReader(enable bool)` method and `iris.CompressReader` middleware to enable future request read body calls to decompress data, [example](_examples/compression/main.go).
- `Context.RegisterDependency(v any)` and `Context.UnregisterDependency(typ reflect.Type)` to register/remove struct dependencies on serve-time through a middleware.
- `Context.SetID(id any)` and `Context.GetID() any` added to register a custom unique indetifier to the Context, if necessary.
- `Context.Scheme() string` returns the full scheme of the request URL.
- `Context.SubdomainFull() string` returns the full subdomain(s) part of the host (`host[0:rootLevelDomain]`).
- `Context.Domain() string` returns the root level domain.
- `Context.AddCookieOptions(...CookieOption)` adds options for `SetCookie`, `SetCookieKV, UpsertCookie` and `RemoveCookie` methods for the current request.
- `Context.ClearCookieOptions()` clears any cookie options registered through `AddCookieOptions`.
- `Context.SetLanguage(langCode string)` force-sets a language code from inside a middleare, similar to the `app.I18n.ExtractFunc`
- `Context.ServeContentWithRate`, `ServeFileWithRate` and `SendFileWithRate` methods to throttle the "download" speed of the client
- `Context.IsHTTP2() bool` reports whether the protocol version for incoming request was HTTP/2
- `Context.IsGRPC() bool` reports whether the request came from a gRPC client
- `Context.UpsertCookie(*http.Cookie, cookieOptions ...context.CookieOption)` upserts a cookie, fixes [#1485](https://github.com/kataras/iris/issues/1485) too
- `Context.StopWithStatus(int)` stops the handlers chain and writes the status code
- `StopWithText(statusCode int, format string, args ...any)` stops the handlers chain, writes thre status code and a plain text message
- `Context.StopWithError(int, error)` stops the handlers chain, writes thre status code and the error's message
- `Context.StopWithJSON(int, any)` stops the handlers chain, writes the status code and sends a JSON response
- `Context.StopWithProblem(int, iris.Problem)` stops the handlers, writes the status code and sends an `application/problem+json` response
- `Context.Protobuf(proto.Message)` sends protobuf to the client (note that the `Context.JSON` is able to send protobuf as JSON)
- `Context.MsgPack(any)` sends msgpack format data to the client
- `Context.ReadProtobuf(ptr)` binds request body to a proto message
- `Context.ReadJSONProtobuf(ptr, ...options)` binds JSON request body to a proto message
- `Context.ReadMsgPack(ptr)` binds request body of a msgpack format to a struct
- `Context.ReadBody(ptr)` binds the request body to the "ptr" depending on the request's Method and Content-Type
- `Context.ReflectValue() []reflect.Value` stores and returns the `[]reflect.ValueOf(ctx)`
- `Context.Controller() reflect.Value` returns the current MVC Controller value.
## MVC & Dependency Injection
The new release contains a fresh new and awesome feature....**a function dependency can accept previous registered dependencies and update or return a new value of any type**.
The new implementation is **faster** on both design and serve-time.
The most common scenario from a route to handle is to:
- accept one or more path parameters and request data, a payload
- send back a response, a payload (JSON, XML,...)
The new Iris Dependency Injection feature is about **33.2% faster** than its predecessor on the above case. This drops down even more the performance cost between native handlers and dynamic handlers with dependencies. This reason itself brings us, with safety and performance-wise, to the new `Party.ConfigureContainer(builder ...func(*iris.APIContainer)) *APIContainer` method which returns methods such as `Handle(method, relativePath string, handlersFn ...any) *Route` and `RegisterDependency`.
Look how clean your codebase can be when using Iris':
```go
package main
import "github.com/kataras/iris/v12"
type (
testInput struct {
Email string `json:"email"`
}
testOutput struct {
ID int `json:"id"`
Name string `json:"name"`
}
)
func handler(id int, in testInput) testOutput {
return testOutput{
ID: id,
Name: in.Email,
}
}
func main() {
app := iris.New()
app.ConfigureContainer(func(api *iris.APIContainer) {
api.Post("/{id:int}", handler)
})
app.Listen(":5000", iris.WithOptimizations)
}
```
Your eyes don't lie you. You read well, no `ctx.ReadJSON(&v)` and `ctx.JSON(send)` neither `error` handling are presented. It is a huge relief but if you ever need, you still have the control over those, even errors from dependencies. Here is a quick list of the new Party.ConfigureContainer()'s fields and methods:
```go
// Container holds the DI Container of this Party featured Dependency Injection.
// Use it to manually convert functions or structs(controllers) to a Handler.
Container *hero.Container
```
```go
// OnError adds an error handler for this Party's DI Hero Container and its handlers (or controllers).
// The "errorHandler" handles any error may occurred and returned
// during dependencies injection of the Party's hero handlers or from the handlers themselves.
OnError(errorHandler func(iris.Context, error))
```
```go
// RegisterDependency adds a dependency.
// The value can be a single struct value or a function.
// Follow the rules:
// * <T> {structValue}
// * func(accepts <T>) returns <D> or (<D>, error)
// * func(accepts iris.Context) returns <D> or (<D>, error)
//
// A Dependency can accept a previous registered dependency and return a new one or the same updated.
// * func(accepts1 <D>, accepts2 <T>) returns <E> or (<E>, error) or error
// * func(acceptsPathParameter1 string, id uint64) returns <T> or (<T>, error)
//
// Usage:
//
// - RegisterDependency(loggerService{prefix: "dev"})
// - RegisterDependency(func(ctx iris.Context) User {...})
// - RegisterDependency(func(User) OtherResponse {...})
RegisterDependency(dependency any)
// UseResultHandler adds a result handler to the Container.
// A result handler can be used to inject the returned struct value
// from a request handler or to replace the default renderer.
UseResultHandler(handler func(next iris.ResultHandler) iris.ResultHandler)
```
<details><summary>ResultHandler</summary>
```go
type ResultHandler func(ctx iris.Context, v any) error
```
</details>
```go
// Use same as a common Party's "Use" but it accepts dynamic functions as its "handlersFn" input.
Use(handlersFn ...any)
// Done same as a common Party's but it accepts dynamic functions as its "handlersFn" input.
Done(handlersFn ...any)
```
```go
// Handle same as a common Party's `Handle` but it accepts one or more "handlersFn" functions which each one of them
// can accept any input arguments that match with the Party's registered Container's `Dependencies` and
// any output result; like custom structs <T>, string, []byte, int, error,
// a combination of the above, hero.Result(hero.View | hero.Response) and more.
//
// It's common from a hero handler to not even need to accept a `Context`, for that reason,
// the "handlersFn" will call `ctx.Next()` automatically when not called manually.
// To stop the execution and not continue to the next "handlersFn"
// the end-developer should output an error and return `iris.ErrStopExecution`.
Handle(method, relativePath string, handlersFn ...any) *Route
// Get registers a GET route, same as `Handle("GET", relativePath, handlersFn....)`.
Get(relativePath string, handlersFn ...any) *Route
// and so on...
```
Prior to this version the `iris.Context` was the only one dependency that has been automatically binded to the handler's input or a controller's fields and methods, read below to see what types are automatically binded:
| Type | Maps To |
|------|:---------|
| [*mvc.Application](https://pkg.go.dev/github.com/kataras/iris/v12/mvc?tab=doc#Application) | Current MVC Application |
| [iris.Context](https://pkg.go.dev/github.com/kataras/iris/v12/context?tab=doc#Context) | Current Iris Context |
| [*sessions.Session](https://pkg.go.dev/github.com/kataras/iris/v12/sessions?tab=doc#Session) | Current Iris Session |
| [context.Context](https://golang.org/pkg/context/#Context) | [ctx.Request().Context()](https://golang.org/pkg/net/http/#Request.Context) |
| [*http.Request](https://golang.org/pkg/net/http/#Request) | `ctx.Request()` |
| [http.ResponseWriter](https://golang.org/pkg/net/http/#ResponseWriter) | `ctx.ResponseWriter()` |
| [http.Header](https://golang.org/pkg/net/http/#Header) | `ctx.Request().Header` |
| [time.Time](https://golang.org/pkg/time/#Time) | `time.Now()` |
| [*golog.Logger](https://pkg.go.dev/github.com/kataras/golog) | Iris Logger |
| [net.IP](https://golang.org/pkg/net/#IP) | `net.ParseIP(ctx.RemoteAddr())` |
| [mvc.Code](https://pkg.go.dev/github.com/kataras/iris/v12/mvc?tab=doc#Code) | `ctx.GetStatusCode() int` |
| [mvc.Err](https://pkg.go.dev/github.com/kataras/iris/v12/mvc?tab=doc#Err) | `ctx.GetErr() error` |
| [iris/context.User](https://pkg.go.dev/github.com/kataras/iris/v12/context?tab=doc#User) | `ctx.User()` |
| `string`, | |
| `int, int8, int16, int32, int64`, | |
| `uint, uint8, uint16, uint32, uint64`, | |
| `float, float32, float64`, | |
| `bool`, | |
| `slice` | [Path Parameter](https://github.com/kataras/iris/blob/main/_examples/routing/dynamic-path/main.go#L20) |
| Struct | [Request Body](https://github.com/kataras/iris/tree/main/_examples/request-body) of `JSON`, `XML`, `YAML`, `Form`, `URL Query`, `Protobuf`, `MsgPack` |
Here is a preview of what the new Hero handlers look like:
### Request & Response & Path Parameters
**1.** Declare Go types for client's request body and a server's response.
```go
type (
request struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
}
response struct {
ID uint64 `json:"id"`
Message string `json:"message"`
}
)
```
**2.** Create the route handler.
Path parameters and request body are binded automatically.
- **id uint64** binds to "id:uint64"
- **input request** binds to client request data such as JSON
```go
func updateUser(id uint64, input request) response {
return response{
ID: id,
Message: "User updated successfully",
}
}
```
**3.** Configure the container per group and register the route.
```go
app.Party("/user").ConfigureContainer(container)
func container(api *iris.APIContainer) {
api.Put("/{id:uint64}", updateUser)
}
```
**4.** Simulate a [client](https://curl.haxx.se/download.html) request which sends data to the server and displays the response.
```sh
curl --request PUT -d '{"firstanme":"John","lastname":"Doe"}' http://localhost:8080/user/42
```
```json
{
"id": 42,
"message": "User updated successfully"
}
```
### Custom Preflight
Before we continue to the next section, register dependencies, you may want to learn how a response can be customized through the `iris.Context` right before sent to the client.
The server will automatically execute the `Preflight(iris.Context) error` method of a function's output struct value right before send the response to the client.
Take for example that you want to fire different HTTP status codes depending on the custom logic inside your handler and also modify the value(response body) itself before sent to the client. Your response type should contain a `Preflight` method like below.
```go
type response struct {
ID uint64 `json:"id,omitempty"`
Message string `json:"message"`
Code int `json:"code"`
Timestamp int64 `json:"timestamp,omitempty"`
}
func (r *response) Preflight(ctx iris.Context) error {
if r.ID > 0 {
r.Timestamp = time.Now().Unix()
}
if r.Code > 0 {
ctx.StatusCode(r.Code)
}
return nil
}
```
Now, each handler that returns a `*response` value will call the `response.Preflight` method automatically.
```go
func deleteUser(db *sql.DB, id uint64) *response {
// [...custom logic]
return &response{
Message: "User has been marked for deletion",
Code: iris.StatusAccepted,
}
}
```
If you register the route and fire a request you should see an output like this, the timestamp is filled and the HTTP status code of the response that the client will receive is 202 (Status Accepted).
```json
{
"message": "User has been marked for deletion",
"code": 202,
"timestamp": 1583313026
}
```
### Register Dependencies
**1.** Import packages to interact with a database.
The go-sqlite3 package is a database driver for [SQLite](https://www.sqlite.org/index.html).
```go
import "database/sql"
import _ "github.com/mattn/go-sqlite3"
```
**2.** Configure the container ([see above](#request--response--path-parameters)), register your dependencies. Handler expects an *sql.DB instance.
```go
localDB, _ := sql.Open("sqlite3", "./foo.db")
api.RegisterDependency(localDB)
```
**3.** Register a route to create a user.
```go
api.Post("/{id:uint64}", createUser)
```
**4.** The create user Handler.
The handler accepts a database and some client request data such as JSON, Protobuf, Form, URL Query and e.t.c. It Returns a response.
```go
func createUser(db *sql.DB, user request) *response {
// [custom logic using the db]
userID, err := db.CreateUser(user)
if err != nil {
return &response{
Message: err.Error(),
Code: iris.StatusInternalServerError,
}
}
return &response{
ID: userID,
Message: "User created",
Code: iris.StatusCreated,
}
}
```
**5.** Simulate a [client](https://curl.haxx.se/download.html) to create a user.
```sh
# JSON
curl --request POST -d '{"firstname":"John","lastname":"Doe"}' \
--header 'Content-Type: application/json' \
http://localhost:8080/user
```
```sh
# Form (multipart)
curl --request POST 'http://localhost:8080/users' \
--header 'Content-Type: multipart/form-data' \
--form 'firstname=John' \
--form 'lastname=Doe'
```
```sh
# Form (URL-encoded)
curl --request POST 'http://localhost:8080/users' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'firstname=John' \
--data-urlencode 'lastname=Doe'
```
```sh
# URL Query
curl --request POST 'http://localhost:8080/users?firstname=John&lastname=Doe'
```
Response:
```json
{
"id": 42,
"message": "User created",
"code": 201,
"timestamp": 1583313026
}
```
## Breaking Changes
- The `versioning.NewMatcher` has been removed entirely in favor of `NewGroup`. Strict versions format on `versioning.NewGroup` is required. E.g. `"1"` is not valid anymore, you have to specify `"1.0.0"`. Example: `NewGroup(api, ">=1.0.0 <2.0.0")`. The [routing/versioning](_examples/routing/versioning) examples have been updated.
- Now that `RegisterView` can be used to register different view engines per-Party, there is no need to support registering multiple engines under the same Party. The `app.RegisterView` now upserts the given Engine instead of append. You can now render templates **without file extension**, e.g. `index` instead of `index.ace`, both forms are valid now.
- The `Context.ContentType` does not accept filenames to resolve the mime type anymore (caused issues with vendor-specific(vnd) MIME types).
- The `Configuration.RemoteAddrPrivateSubnets.IPRange.Start and End` are now type of `string` instead of `net.IP`. The `WithRemoteAddrPrivateSubnet` option remains as it is, already accepts `string`s.
- The `i18n#LoaderConfig.FuncMap template.FuncMap` field was replaced with `Funcs func(iris.Locale) template.FuncMap` in order to give current locale access to the template functions. A new `app.I18n.Loader` was introduced too, in order to make it easier for end-developers to customize the translation key values.
- Request Logger's `Columns bool` field has been removed. Use the new [accesslog](https://github.com/kataras/iris/tree/main/_examples/logging/request-logger/accesslog/main.go) middleware instead.
- The `.Binary` method of all view engines was removed: pass the go-bindata's latest version `AssetFile()` exported function as the first argument instead of string. All examples updated.
- `ContextUploadFormFiles(destDirectory string, before ...func(*Context, *multipart.FileHeader) bool) (uploaded []*multipart.FileHeader, n int64, err error)` now returns the total files uploaded too (as its first parameter) and the "before" variadic option should return a boolean, if false then the specific file is skipped.
- `Context.PostValues(name string) ([]string, error)` now returns a second output argument of `error` type too, which reports `ErrEmptyForm` or `ErrNotFound` or `ErrEmptyFormField`. The single post value getters now returns the **last value** if multiple was given instead of the first one (this allows clients to append values on flow updates).
- `Party.GetReporter()` **removed**. The `Application.Build` returns the first error now and the API's errors are logged, this allows the server to run even if some of the routes are invalid but not fatal to the entire application (it was a request from a company).
- `versioning.NewGroup(string)` now accepts a `Party` as its first input argument: `NewGroup(Party, string)`.
- `versioning.RegisterGroups` is **removed** as it is no longer necessary.
- `Configuration.RemoteAddrHeaders` from `map[string]bool` to `[]string`. If you used `With(out)RemoteAddrHeader` then you are ready to proceed without any code changes for that one.
- `ctx.Gzip(boolean)` replaced with `ctx.CompressWriter(boolean) error`.
- `ctx.GzipReader(boolean) error` replaced with `ctx.CompressReader(boolean) error`.
- `iris.Gzip` and `iris.GzipReader` replaced with `iris.Compression` (middleware).
- `ctx.ClientSupportsGzip() bool` replaced with `ctx.ClientSupportsEncoding("gzip", "br" ...) bool`.
- `ctx.GzipResponseWriter()` is **removed**.
- `Party.HandleDir/iris.FileServer` now accepts both `http.FileSystem` and `string` and returns a list of `[]*Route` (GET and HEAD) instead of GET only. You can write: both `app.HandleDir("/", iris.Dir("./assets"))` and `app.HandleDir("/", "./assets")` and `DirOptions.Asset, AssetNames, AssetInfo` removed, use `go-bindata -fs [..]` and `app.HandleDir("/", AssetFile())` instead.
- `Context.OnClose` and `Context.OnCloseConnection` now both accept an `iris.Handler` instead of a simple `func()` as their callback.
- `Context.StreamWriter(writer func(w io.Writer) bool)` changed to `StreamWriter(writer func(w io.Writer) error) error` and it's now the `Context.Request().Context().Done()` channel that is used to receive any close connection/manual cancel signals, instead of the deprecated `ResponseWriter().CloseNotify()` one. Same for the `Context.OnClose` and `Context.OnCloseConnection` methods.
- Fixed handler's error response not be respected when response recorder was used instead of the common writer. Fixes [#1531](https://github.com/kataras/iris/issues/1531). It contains a **BREAKING CHANGE** of: the new `Configuration.ResetOnFireErrorCode` field should be set **to true** in order to behave as it used before this update (to reset the contents on recorder).
- `Context.String()` (rarely used by end-developers) it does not return a unique string anymore, to achieve the old representation you must call the new `Context.SetID` method first.
- `iris.CookieEncode` and `CookieDecode` are replaced with the `iris.CookieEncoding`.
- `sessions#Config.Encode` and `Decode` are removed in favor of (the existing) `Encoding` field.
- `versioning.GetVersion` now returns an empty string if version wasn't found.
- Change the MIME type of `Javascript .js` and `JSONP` as the HTML specification now recommends to `"text/javascript"` instead of the obselete `"application/javascript"`. This change was pushed to the `Go` language itself as well. See <https://go-review.googlesource.com/c/go/+/186927/>.
- Remove the last input argument of `enableGzipCompression` in `Context.ServeContent`, `ServeFile` methods. This was deprecated a few versions ago. A middleware (`app.Use(iris.CompressWriter)`) or a prior call to `Context.CompressWriter(true)` will enable compression. Also these two methods and `Context.SendFile` one now support `Content-Range` and `Accept-Ranges` correctly out of the box (`net/http` had a bug, which is now fixed).
- `Context.ServeContent` no longer returns an error, see `ServeContentWithRate`, `ServeFileWithRate` and `SendFileWithRate` new methods too.
- `route.Trace() string` changed to `route.Trace(w io.Writer)`, to achieve the same result just pass a `bytes.Buffer`
- `var mvc.AutoBinding` removed as the default behavior now resolves such dependencies automatically (see [[FEATURE REQUEST] MVC serving gRPC-compatible controller](https://github.com/kataras/iris/issues/1449)).
- `mvc#Application.SortByNumMethods()` removed as the default behavior now binds the "thinnest" empty `any` automatically (see [MVC: service injecting fails](https://github.com/kataras/iris/issues/1343)).
- `mvc#BeforeActivation.Dependencies().Add` should be replaced with `mvc#BeforeActivation.Dependencies().Register` instead
- **REMOVE** the `kataras/iris/v12/typescript` package in favor of the new [iris-cli](https://github.com/kataras/iris-cli). Also, the alm typescript online editor was removed as it is deprecated by its author, please consider using the [designtsx](https://designtsx.com/) instead.
# Su, 16 February 2020 | v12.1.8
New Features:
- [[FEATURE REQUEST] MVC serving gRPC-compatible controller](https://github.com/kataras/iris/issues/1449)
Fixes:
- [App can't find embedded pug template files by go-bindata](https://github.com/kataras/iris/issues/1450)
New Examples:
- [_examples/mvc/grpc-compatible](_examples/mvc/grpc-compatible)
# Mo, 10 February 2020 | v12.1.7
Implement **new** `SetRegisterRule(iris.RouteOverride, RouteSkip, RouteError)` to resolve: https://github.com/kataras/iris/issues/1448
New Examples:
- [_examples/routing/route-register-rule](_examples/routing/route-register-rule)
# We, 05 February 2020 | v12.1.6
Fixes:
- [jet.View - urlpath error](https://github.com/kataras/iris/issues/1438)
- [Context.ServeFile send 'application/wasm' with a wrong extra field](https://github.com/kataras/iris/issues/1440)
# Su, 02 February 2020 | v12.1.5
Various improvements and linting.
# Su, 29 December 2019 | v12.1.4
Minor fix on serving embedded files.
# We, 25 December 2019 | v12.1.3
Fix [[BUG] [iris.Default] RegisterView](https://github.com/kataras/iris/issues/1410)
# Th, 19 December 2019 | v12.1.2
Fix [[BUG]Session works incorrectly when meets the multi-level TLDs](https://github.com/kataras/iris/issues/1407).
# Mo, 16 December 2019 | v12.1.1
Add [Context.FindClosest(n int) []string](https://github.com/kataras/iris/blob/main/_examples/routing/intelligence/manual/main.go#L22)
```go
app := iris.New()
app.OnErrorCode(iris.StatusNotFound, notFound)
```
```go
func notFound(ctx iris.Context) {
suggestPaths := ctx.FindClosest(3)
if len(suggestPaths) == 0 {
ctx.WriteString("404 not found")
return
}
ctx.HTML("Did you mean?<ul>")
for _, s := range suggestPaths {
ctx.HTML(`<li><a href="%s">%s</a></li>`, s, s)
}
ctx.HTML("</ul>")
}
```

# Fr, 13 December 2019 | v12.1.0
## Breaking Changes
Minor as many of you don't even use them but, indeed, they need to be covered here.
- Old i18n middleware(iris/middleware/i18n) was replaced by the [i18n](i18n) sub-package which lives as field at your application: `app.I18n.Load(globPathPattern string, languages ...string)` (see below)
- Community-driven i18n middleware(iris-contrib/middleware/go-i18n) has a `NewLoader` function which returns a loader which can be passed at `app.I18n.Reset(loader i18n.Loader, languages ...string)` to change the locales parser
- The Configuration's `TranslateFunctionContextKey` was replaced by `LocaleContextKey` which Context store's value (if i18n is used) returns the current Locale which contains the translate function, the language code, the language tag and the index position of it
- The `context.Translate` method was replaced by `context.Tr` as a shortcut for the new `context.GetLocale().GetMessage(format, args...)` method and it matches the view's function `{{tr format args}}` too
- If you used [Iris Django](https://github.com/kataras/iris/tree/main/_examples/view/template_django_0) view engine with `import _ github.com/flosch/pongo2-addons` you **must change** the import path to `_ github.com/iris-contrib/pongo2-addons` or add a [go mod replace](https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive) to your `go.mod` file, e.g. `replace github.com/flosch/pongo2-addons => github.com/iris-contrib/pongo2-addons v0.0.1`.
## Fixes
All known issues.
1. [#1395](https://github.com/kataras/iris/issues/1395)
2. [#1369](https://github.com/kataras/iris/issues/1369)
3. [#1399](https://github.com/kataras/iris/issues/1399) with PR [#1400](https://github.com/kataras/iris/pull/1400)
4. [#1401](https://github.com/kataras/iris/issues/1401)
5. [#1406](https://github.com/kataras/iris/issues/1406)
6. [neffos/#20](https://github.com/kataras/neffos/issues/20)
7. [pio/#5](https://github.com/kataras/pio/issues/5)
## New Features
### Internationalization and localization
Support for i18n is now a **builtin feature** and is being respected across your entire application, per say [sitemap](https://github.com/kataras/iris/blob/main/_examples/routing/sitemap/main.go) and [views](https://github.com/kataras/iris/blob/main/_examples/i18n/basic/main.go#L50).
### Sitemaps
Iris generates and serves one or more [sitemap.xml](https://www.sitemaps.org/protocol.html) for your static routes.
Navigate through: https://github.com/kataras/iris/blob/main/_examples/routing/sitemap/main.go for more.
## New Examples
2. [_examples/i18n](_examples/i18n)
1. [_examples/sitemap](_examples/routing/sitemap)
3. [_examples/desktop/blink](_examples/desktop/blink)
4. [_examples/desktop/lorca](_examples/desktop/lorca)
5. [_examples/desktop/webview](_examples/desktop/webview)
# Sa, 26 October 2019 | v12.0.0
- Add version suffix of the **import path**, learn why and see what people voted at [issue #1370](https://github.com/kataras/iris/issues/1370)

- All errors are now compatible with go1.13 `errors.Is`, `errors.As` and `fmt.Errorf` and a new `core/errgroup` package created
- Fix [#1383](https://github.com/kataras/iris/issues/1383)
- Report whether system couldn't find the directory of view templates
- Remove the `Party#GetReport` method, keep `Party#GetReporter` which is an `error` and an `errgroup.Group`.
- Remove the router's deprecated methods such as StaticWeb and StaticEmbedded_XXX
- The `Context#CheckIfModifiedSince` now returns an `context.ErrPreconditionFailed` type of error when client conditions are not met. Usage: `if errors.Is(err, context.ErrPreconditionFailed) { ... }`
- Add `SourceFileName` and `SourceLineNumber` to the `Route`, reports the exact position of its registration inside your project's source code.
- Fix a bug about the MVC package route binding, see [PR #1364](https://github.com/kataras/iris/pull/1364)
- Add `mvc/Application#SortByNumMethods` as requested at [#1343](https://github.com/kataras/iris/issues/1343#issuecomment-524868164)
- Add status code `103 Early Hints`
- Fix performance of session.UpdateExpiration on 200 thousands+ keys with new radix as reported at [issue #1328](https://github.com/kataras/iris/issues/1328)
- New redis session database configuration field: `Driver: redis.Redigo()` or `redis.Radix()`, see [updated examples](_examples/sessions/database/redis/)
- Add Clusters support for redis:radix session database (`Driver: redis:Radix()`) as requested at [issue #1339](https://github.com/kataras/iris/issues/1339)
- Create Iranian [README_FA](README_FA.md) translation with [PR #1360](https://github.com/kataras/iris/pull/1360)
- Create Korean [README_KO](README_KO.md) translation with [PR #1356](https://github.com/kataras/iris/pull/1356)
- Create Spanish [README_ES](README_ES.md) and [HISTORY_ES](HISTORY_ES.md) translations with [PR #1344](https://github.com/kataras/iris/pull/1344).
The iris-contrib/middleare and examples are updated to use the new `github.com/kataras/iris/v12` import path.
# Fr, 16 August 2019 | v11.2.8
- Set `Cookie.SameSite` to `Lax` when subdomains sessions share is enabled[*](https://github.com/kataras/iris/commit/6bbdd3db9139f9038641ce6f00f7b4bab6e62550)
- Add and update all [experimental handlers](https://github.com/iris-contrib/middleware)
- New `XMLMap` function which wraps a `map[string]any` and converts it to a valid xml content to render through `Context.XML` method
- Add new `ProblemOptions.XML` and `RenderXML` fields to render the `Problem` as XML(application/problem+xml) instead of JSON("application/problem+json) and enrich the `Negotiate` to easily accept the `application/problem+xml` mime.
Commit log: https://github.com/kataras/iris/compare/v11.2.7...v11.2.8
# Th, 15 August 2019 | v11.2.7
This minor version contains improvements on the Problem Details for HTTP APIs implemented on [v11.2.5](#mo-12-august-2019--v1125).
- Fix https://github.com/kataras/iris/issues/1335#issuecomment-521319721
- Add `ProblemOptions` with `RetryAfter` as requested at: https://github.com/kataras/iris/issues/1335#issuecomment-521330994.
- Add `iris.JSON` alias for `context#JSON` options type.
[Example](https://github.com/kataras/iris/blob/45d7c6fedb5adaef22b9730592255f7bb375e809/_examples/routing/http-errors/main.go#L85) updated.
References:
- https://tools.ietf.org/html/rfc7231#section-7.1.3
- https://tools.ietf.org/html/rfc7807
Commit log: https://github.com/kataras/iris/compare/v11.2.6...v11.2.7
# We, 14 August 2019 | v11.2.6
Allow [handle more than one route with the same paths and parameter types but different macro validation functions](https://github.com/kataras/iris/issues/1058#issuecomment-521110639).
```go
app.Get("/{alias:string regexp(^[a-z0-9]{1,10}\\.xml$)}", PanoXML)
app.Get("/{alias:string regexp(^[a-z0-9]{1,10}$)}", Tour)
```
Commit log: https://github.com/kataras/iris/compare/v11.2.5...v11.2.6
# Mo, 12 August 2019 | v11.2.5
- [New Feature: Problem Details for HTTP APIs](https://github.com/kataras/iris/pull/1336)
- [Add Context.AbsoluteURI](https://github.com/kataras/iris/pull/1336/files#diff-15cce7299aae8810bcab9b0bf9a2fdb1R2368)
Commit log: https://github.com/kataras/iris/compare/v11.2.4...v11.2.5
# Fr, 09 August 2019 | v11.2.4
- Fixes [iris.Jet: no view engine found for '.jet' or '.html'](https://github.com/kataras/iris/issues/1327)
- Fixes [ctx.ViewData not work with JetEngine](https://github.com/kataras/iris/issues/1330)
- **New Feature**: [HTTP Method Override](https://github.com/kataras/iris/issues/1325)
- Fixes [Poor performance of session.UpdateExpiration on 200 thousands+ keys with new radix lib](https://github.com/kataras/iris/issues/1328) by introducing the `sessions.Config.Driver` configuration field which defaults to `Redigo()` but can be set to `Radix()` too, future additions are welcomed.
Commit log: https://github.com/kataras/iris/compare/v11.2.3...v11.2.4
# Tu, 30 July 2019 | v11.2.3
- [New Feature: Handle different parameter types in the same path](https://github.com/kataras/iris/issues/1315)
- [New Feature: Content Negotiation](https://github.com/kataras/iris/issues/1319)
- [Context.ReadYAML](https://github.com/kataras/iris/tree/main/_examples/request-body/read-yaml)
- Fixes https://github.com/kataras/neffos/issues/1#issuecomment-515698536
# We, 24 July 2019 | v11.2.2
Sessions as middleware:
```go
import "github.com/kataras/iris/v12/sessions"
// [...]
app := iris.New()
sess := sessions.New(sessions.Config{...})
app.Get("/path", func(ctx iris.Context){
session := sessions.Get(ctx)
// [work with session...]
})
```
- Add `Session.Len() int` to return the total number of stored values/entries.
- Make `Context.HTML` and `Context.Text` to accept an optional, variadic, `args ...any` input arg(s) too.
## v11.1.1
- https://github.com/kataras/iris/issues/1298
- https://github.com/kataras/iris/issues/1207
# Tu, 23 July 2019 | v11.2.0
Read about the new release at: https://www.facebook.com/iris.framework/posts/3276606095684693
================================================
FILE: LICENSE
================================================
BSD 3-Clause License
Copyright (c) 2016-2026, Gerasimos (Makis) Maropoulos
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: NOTICE
================================================
================================================================================
Third-Party Software for iris
================================================================================
The following 3rd-party software packages may be used by or distributed with iris. This document was automatically generated by FOSSA on 4 Oct 2020; any information relevant to third-party vendors listed below are collected using common, reasonable means.
Revision ID: 5fc50a00491616d5cd0cbce3abd8b699838e25ca
----------------- ----------------- ------------------------------------------
Package Version Website
----------------- ----------------- ------------------------------------------
ace ea038f4770b6746 https://github.com/yosssi/ace
c3f8f84f14fa60d
9fe1205b56
badger 536fed1846d0f4d https://github.com/dgraph-io/badger
b9579bcff679761
4e134eadfa
bbolt a8af23b57f672fe https://github.com/etcd-io/bbolt
f05637de531bba5
aa00013364
markdown 2ced44d5b58482a https://github.com/gomarkdown/markdown
9b77d1abad4c3d3
4b190880fe
bluemonday 0a75d7616912ab9 https://github.com/microcosm-cc/bluemonday
beb9cc6f7283ec1
917c61b135
blocks 2782010d7127295 https://github.com/kataras/blocks
d72dc16632c7c0c
01dfbf6ceb
brotli c3da72aa01ed78f https://github.com/andybalholm/brotli
164593b9624fd91
d25082d2d2
closestmatch 1fbe626be92eb4c https://github.com/schollz/closestmatch
347d182cae9f8f0
0a046bf2f4
compress 4a2d40e4b07e5b3 https://github.com/klauspost/compress
d333bc0569facd0
f2dbf4ef39
crypto 4b2356b1ed79e6b https://go.googlesource.com/crypto
e3deca3737a3db3
d132d2847a
easyjson 8ab5ff9cd8e4e43 https://github.com/mailru/easyjson
2e8b79f6c47d324
a31dd803cf
securecookie e59506cc896acb7 https://github.com/gorilla/securecookie
f7bf732d4fdf5e2
5f7ccd8983
semver 4487282d78122a2 https://github.com/blang/semver
45e413d7515e7c5
16b70c33fd
golog f7561df84e64ab9 https://github.com/kataras/golog
212f021923ce4ff
db5df5594d
goreferrer ec9c9a553398739 https://github.com/Shopify/goreferrer
f0dcf817e0ad5e0
1c4e7dcd08
httpexpect bfc40287c2c3ad4 https://github.com/iris-contrib/
cdf8c4f40e7908a httpexpect
b137f9227d
ini.v1 39bc4ddcb8b9d01 https://gopkg.in/ini.v1
00f7a040816380c
cda878b94a
jade 92f294662063510 https://github.com/iris-contrib/jade
cac723decad0fba
2ebc878560
jet 305ebcf60d48fce https://github.com/CloudyKit/jet
5905bdf00159a0e
1029f1d962
msgpack 911bfe50493ebbc https://github.com/vmihailenco/msgpack
b6e0af9e6f36451
255746ff46
minify 119ab8b676c60a6 https://github.com/tdewolff/minify
12b9cc824e6a84a
865191aabb
neffos 2221a9afc8392b9 https://github.com/kataras/neffos
a3e984473dd34f8
380ce80840
pio 2e3d576cc65913a https://github.com/kataras/pio
dd6106f1ce02837
2c7e6d943c
pongo2 f946812ec8d53b7 https://github.com/flosch/pongo2
24e4daeb888c95a
b63c98b3c0
protobuf 6c66de79d66478d https://github.com/golang/protobuf
166c7ea05f5d2cc
af016fbd6b
raymond cd18a09da5ea49b https://github.com/mailgun/raymond
b9a8cbec107a22a
9c0e792c21
go-redis 7125bf611e5d7d9 https://github.com/go-redis/redis
bb4487dd6cb80d8
88bad92d23
schema 1f5dc3fa1ac5179 https://github.com/iris-contrib/schema
78c014cb1df9954
0fa5b17f7e
sitemap f223711fe0c7a64 https://github.com/kataras/sitemap
2bb2d8f2645f0ed
386ba577bc
structs 878a968ab225483 https://github.com/fatih/structs
62a09bdb3322f98
b00f470d46
toml 3012a1dbe2e4bd1 https://github.com/BurntSushi/toml
391d42b32f0577c
b7bbc7f005
jwt 933b4a74659b074 https://github.com/kataras/jwt
00070920d0700b9
63fa545d6c
uuid cb32006e483f2a2 https://github.com/google/uuid
3230e24209cf185
c65b477dbf
================================================
FILE: README.md
================================================
<!--<h1><img width="24" height="25" src ="https://www.iris-go.com/images/logo-new-lq-45.png"/> News</h1>
Iris version **12.2.0** has been [released](HISTORY.md#sa-11-march-2023--v1220)! As always, the latest version of Iris comes with the promise of lifetime active maintenance.
Try the official [Iris Command Line Interface](https://github.com/kataras/iris-cli) today! -->
# <a href="https://iris-go.com"><img src="https://iris-go.com/iris-terminal-55.png" width="50px" height="50px" style="margin-bottom: -5px" ></a> Iris Web Framework <a href="README_GR.md"><img width="20px" src="https://iris-go.com/static/images/flag-greece.svg" /> <a href="README_JA.md"><img width="20px" height="20px" src="https://iris-go.com/static/images/flag-japan.svg" /></a> </a> <a href="README_FR.md"><img width="20px" src="https://iris-go.com/static/images/flag-france.svg" /></a> <a href="README_ZH_HANT.md"><img width="20px" src="https://iris-go.com/static/images/flag-taiwan.svg" /></a> <a href="README_ZH_HANS.md"><img width="20px" src="https://iris-go.com/static/images/flag-china.svg" /></a> <a href="README_ES.md"><img width="20px" src="https://iris-go.com/static/images/flag-spain.png" /></a> <a href="README_FA.md"><img width="20px" src="https://iris-go.com/static/images/flag-iran.svg" /></a> <a href="README_RU.md"><img width="20px" src="https://iris-go.com/static/images/flag-russia.svg" /></a> <a href="README_KO.md"><img width="20px" src="https://iris-go.com/static/images/flag-south-korea.svg?v=12" /></a> <a href="README_PT_BR.md"><img width="20px" height="20px" src="https://iris-go.com/static/images/flag-brazil.svg" /></a> <a href="README_VN.md"><img width="20px" height="20px" src="https://iris-go.com/static/images/flag-vietnam.svg" /></a>
[](https://github.com/kataras/iris/actions/workflows/ci.yml) [](https://github.com/kataras/iris/tree/main/_examples) [](https://gitter.im/iris_go/community) <!--[](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield)--> [](https://iris-go.com/donate) <!--[](https://goreportcard.com/report/github.com/kataras/iris)--><!--[](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11)--> <!-- [](https://github.com/kataras/iris/releases) -->
🎁 Iris is a fast, simple yet fully featured and very efficient web framework for Go - the perfect gift for developers this holiday season!
✨ It provides a beautifully expressive and easy to use foundation for your next website or API, wrapped with care and decorated with powerful features.
🌟 Learn what [others saying about Iris](https://www.iris-go.com/#review) and **[star](https://github.com/kataras/iris/stargazers)** this open-source project
[](https://iris-go.com/testimonials/)
[](https://github.com/kataras/server-benchmarks)
```go
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Use(iris.Compression)
app.Get("/", func(ctx iris.Context) {
ctx.HTML("Happy New Year <strong>%s</strong>! 🎅", "World")
})
app.Listen(":8080")
}
```
<!-- <details><summary>More with simple Handler</summary>
```go
package main
import "github.com/kataras/iris/v12"
type (
request struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
}
response struct {
ID string `json:"id"`
Message string `json:"message"`
}
)
func main() {
app := iris.New()
app.Handle("PUT", "/users/{id:uuid}", updateUser)
app.Listen(":8080")
}
func updateUser(ctx iris.Context) {
id := ctx.Params().Get("id")
var req request
if err := ctx.ReadJSON(&req); err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
resp := response{
ID: id,
Message: req.Firstname + " updated successfully",
}
ctx.JSON(resp)
}
```
> Read the [routing examples](https://github.com/kataras/iris/blob/main/_examples/routing) for more!
</details>
<details><summary>Handler with custom input and output arguments</summary>
[](https://twitter.com/iris_framework/status/1234783655408668672)
> Interesting? Read the [examples](https://github.com/kataras/iris/blob/main/_examples/dependency-injection).
</details>
<details><summary>Party Controller (NEW)</summary>
> Head over to the [full running example](https://github.com/kataras/iris/blob/main/_examples/routing/party-controller)!
</details>
<details><summary>MVC</summary>
```go
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/mvc"
)
type (
request struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
}
response struct {
ID uint64 `json:"id"`
Message string `json:"message"`
}
)
func main() {
app := iris.New()
mvc.Configure(app.Party("/users"), configureMVC)
app.Listen(":8080")
}
func configureMVC(app *mvc.Application) {
app.Handle(new(userController))
}
type userController struct {
// [...dependencies]
}
func (c *userController) PutBy(id uint64, req request) response {
return response{
ID: id,
Message: req.Firstname + " updated successfully",
}
}
```
Want to see more? Navigate through [mvc examples](_examples/mvc)!
</details>
<details><summary>API Guide <strong>HOT</strong></summary>
```go
package main
import (
// [other packages...]
"github.com/kataras/iris/v12"
)
func main() {
iris.NewGuide().
AllowOrigin("*").
Compression(true).
Health(true, "development", "kataras").
Timeout(0, 20*time.Second, 20*time.Second).
Middlewares(basicauth.New(...)).
Services(
// NewDatabase(),
// NewPostgresRepositoryRegistry,
// NewUserService,
).
API("/users", new(UsersAPI)).
Listen(":80")
}
```
</details>
<br/>
-->
As one [Go developer](https://twitter.com/dkuye/status/1532087942696554497) once said, **Iris got you covered all-round and standing strong over the years** ⭐
Some of the features Iris offers:
* HTTP/2 (Push, even Embedded data)
* Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)
* API Versioning
* Model-View-Controller
* Websockets
* gRPC
* Auto-HTTPS
* Builtin support for ngrok to put your app on the internet, the fastest way
* Unique Router with dynamic path as parameter with standard types like :uuid, :string, :int... and the ability to create your own
* Compression
* View Engines (HTML, Django, Handlebars, Pug/Jade and more)
* Create your own File Server and host your own WebDAV server
* Cache
* Localization (i18n, sitemap)
* Sessions
* Rich Responses (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events and more)
* Response Compression (gzip, deflate, brotli, snappy, s2)
* Rich Requests (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack and more)
* Dependency Injection (MVC, Handlers, API Routers)
* Testing Suite
* And the most important... you get fast answers and support from the 1st day until now - that's six full years!
## 👑 <a href="https://iris-go.com/donate">Supporters</a>
With your help, we can improve Open Source web development for everyone!
<p>
<a href="https://github.com/getsentry"><img src="https://avatars1.githubusercontent.com/u/1396951?v=4" alt="getsentry" title="getsentry" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/github"><img src="https://avatars1.githubusercontent.com/u/9919?v=4" alt="github" title="github" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lensesio"><img src="https://avatars1.githubusercontent.com/u/11728472?v=4" alt="lensesio" title="lensesio" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/thepunterbot"><img src="https://avatars1.githubusercontent.com/u/111136029?v=4" alt="thepunterbot" title="thepunterbot" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/h4rdc0m"><img src="https://avatars1.githubusercontent.com/u/682256?v=4" alt="h4rdc0m" title="h4rdc0m" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/draFWM"><img src="https://avatars1.githubusercontent.com/u/5765340?v=4" alt="draFWM" title="draFWM" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gf3"><img src="https://avatars1.githubusercontent.com/u/18397?v=4" alt="gf3" title="gf3" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/trading-peter"><img src="https://avatars1.githubusercontent.com/u/11567985?v=4" alt="trading-peter" title="trading-peter" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/AlbinoGeek"><img src="https://avatars1.githubusercontent.com/u/1910461?v=4" alt="AlbinoGeek" title="AlbinoGeek" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/basilarchia"><img src="https://avatars1.githubusercontent.com/u/926033?v=4" alt="basilarchia" title="basilarchia" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/sumjoe"><img src="https://avatars1.githubusercontent.com/u/32655210?v=4" alt="sumjoe" title="sumjoe" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/simpleittools"><img src="https://avatars1.githubusercontent.com/u/42871067?v=4" alt="simpleittools" title="simpleittools" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/xiaozhuai"><img src="https://avatars1.githubusercontent.com/u/4773701?v=4" alt="xiaozhuai" title="xiaozhuai" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Remydeme"><img src="https://avatars1.githubusercontent.com/u/22757039?v=4" alt="Remydeme" title="Remydeme" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/celsosz"><img src="https://avatars1.githubusercontent.com/u/3466493?v=4" alt="celsosz" title="celsosz" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/linxcoder"><img src="https://avatars1.githubusercontent.com/u/1050802?v=4" alt="linxcoder" title="linxcoder" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jnelle"><img src="https://avatars1.githubusercontent.com/u/36324542?v=4" alt="jnelle" title="jnelle" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/TechMaster"><img src="https://avatars1.githubusercontent.com/u/1491686?v=4" alt="TechMaster" title="TechMaster" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/janwebdev"><img src="https://avatars1.githubusercontent.com/u/6725905?v=4" alt="janwebdev" title="janwebdev" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/altafino"><img src="https://avatars1.githubusercontent.com/u/24539467?v=4" alt="altafino" title="altafino" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jakoubek"><img src="https://avatars1.githubusercontent.com/u/179566?v=4" alt="jakoubek" title="jakoubek" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/alekperos"><img src="https://avatars1.githubusercontent.com/u/683938?v=4" alt="alekperos" title="alekperos" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/day0ng"><img src="https://avatars1.githubusercontent.com/u/15760418?v=4" alt="day0ng" title="day0ng" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hengestone"><img src="https://avatars1.githubusercontent.com/u/362587?v=4" alt="hengestone" title="hengestone" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/thomasfr"><img src="https://avatars1.githubusercontent.com/u/287432?v=4" alt="thomasfr" title="thomasfr" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/code-chimp"><img src="https://avatars1.githubusercontent.com/u/50490?v=4" alt="code-chimp" title="code-chimp" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/CetinBasoz"><img src="https://avatars1.githubusercontent.com/u/3152637?v=4" alt="CetinBasoz" title="CetinBasoz" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/International"><img src="https://avatars1.githubusercontent.com/u/1022918?v=4" alt="International" title="International" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Juanses"><img src="https://avatars1.githubusercontent.com/u/6137970?v=4" alt="Juanses" title="Juanses" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/SometimesMage"><img src="https://avatars1.githubusercontent.com/u/1435257?v=4" alt="SometimesMage" title="SometimesMage" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ansrivas"><img src="https://avatars1.githubusercontent.com/u/1695056?v=4" alt="ansrivas" title="ansrivas" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/boreevyuri"><img src="https://avatars1.githubusercontent.com/u/10973128?v=4" alt="boreevyuri" title="boreevyuri" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/brentwilson"><img src="https://avatars1.githubusercontent.com/u/11813757?v=4" alt="brentwilson" title="brentwilson" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/camilbinas"><img src="https://avatars1.githubusercontent.com/u/42443219?v=4" alt="camilbinas" title="camilbinas" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ekobayong"><img src="https://avatars1.githubusercontent.com/u/878170?v=4" alt="ekobayong" title="ekobayong" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lexrus"><img src="https://avatars1.githubusercontent.com/u/219689?v=4" alt="lexrus" title="lexrus" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/li3p"><img src="https://avatars1.githubusercontent.com/u/55519?v=4" alt="li3p" title="li3p" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/madhu72"><img src="https://avatars1.githubusercontent.com/u/10324127?v=4" alt="madhu72" title="madhu72" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mosorize"><img src="https://avatars1.githubusercontent.com/u/107021151?v=4" alt="mosorize" title="mosorize" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/se77en"><img src="https://avatars1.githubusercontent.com/u/1468284?v=4" alt="se77en" title="se77en" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/tstangenberg"><img src="https://avatars1.githubusercontent.com/u/736160?v=4" alt="tstangenberg" title="tstangenberg" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/vincent-li"><img src="https://avatars1.githubusercontent.com/u/765470?v=4" alt="vincent-li" title="vincent-li" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/DavidShaw"><img src="https://avatars1.githubusercontent.com/u/356970?v=4" alt="DavidShaw" title="DavidShaw" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/sascha11110"><img src="https://avatars1.githubusercontent.com/u/15168372?v=4" alt="sascha11110" title="sascha11110" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/clichi2002"><img src="https://avatars1.githubusercontent.com/u/5856121?v=4" alt="clichi2002" title="clichi2002" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/derReineke"><img src="https://avatars1.githubusercontent.com/u/35681013?v=4" alt="derReineke" title="derReineke" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Sirisap22"><img src="https://avatars1.githubusercontent.com/u/58851659?v=4" alt="Sirisap22" title="Sirisap22" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/primadi"><img src="https://avatars1.githubusercontent.com/u/7625413?v=4" alt="primadi" title="primadi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/agoncecelia"><img src="https://avatars1.githubusercontent.com/u/10442924?v=4" alt="agoncecelia" title="agoncecelia" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/chrisliang12"><img src="https://avatars1.githubusercontent.com/u/97201988?v=4" alt="chrisliang12" title="chrisliang12" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/zyu"><img src="https://avatars1.githubusercontent.com/u/807397?v=4" alt="zyu" title="zyu" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hobysmith"><img src="https://avatars1.githubusercontent.com/u/6063391?v=4" alt="hobysmith" title="hobysmith" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/pluja"><img src="https://avatars1.githubusercontent.com/u/64632615?v=4" alt="pluja" title="pluja" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/antonio-pedrazzini"><img src="https://avatars1.githubusercontent.com/u/83503326?v=4" alt="antonio-pedrazzini" title="antonio-pedrazzini" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/clacroix"><img src="https://avatars1.githubusercontent.com/u/611064?v=4" alt="clacroix" title="clacroix" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/njeff3"><img src="https://avatars1.githubusercontent.com/u/9838120?v=4" alt="njeff3" title="njeff3" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ixalender"><img src="https://avatars1.githubusercontent.com/u/877376?v=4" alt="ixalender" title="ixalender" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mubariz-ahmed"><img src="https://avatars1.githubusercontent.com/u/18215455?v=4" alt="mubariz-ahmed" title="mubariz-ahmed" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Cesar"><img src="https://avatars1.githubusercontent.com/u/1581870?v=4" alt="Cesar" title="Cesar" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/th31nitiate"><img src="https://avatars1.githubusercontent.com/u/14749635?v=4" alt="th31nitiate" title="th31nitiate" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/stgrosshh"><img src="https://avatars1.githubusercontent.com/u/8356082?v=4" alt="stgrosshh" title="stgrosshh" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Didainius"><img src="https://avatars1.githubusercontent.com/u/15804230?v=4" alt="Didainius" title="Didainius" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/DmarshalTU"><img src="https://avatars1.githubusercontent.com/u/59089266?v=4" alt="DmarshalTU" title="DmarshalTU" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/IwateKyle"><img src="https://avatars1.githubusercontent.com/u/658799?v=4" alt="IwateKyle" title="IwateKyle" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Little-YangYang"><img src="https://avatars1.githubusercontent.com/u/10755202?v=4" alt="Little-YangYang" title="Little-YangYang" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Major2828"><img src="https://avatars1.githubusercontent.com/u/19783402?v=4" alt="Major2828" title="Major2828" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/MatejLach"><img src="https://avatars1.githubusercontent.com/u/531930?v=4" alt="MatejLach" title="MatejLach" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/amritpal042"><img src="https://avatars1.githubusercontent.com/u/60704162?v=4" alt="amritpal042" title="amritpal042" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/andrefiorot"><img src="https://avatars1.githubusercontent.com/u/13743098?v=4" alt="andrefiorot" title="andrefiorot" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/boomhut"><img src="https://avatars1.githubusercontent.com/u/56619040?v=4" alt="boomhut" title="boomhut" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/cshum"><img src="https://avatars1.githubusercontent.com/u/293790?v=4" alt="cshum" title="cshum" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dtrifonov"><img src="https://avatars1.githubusercontent.com/u/1520118?v=4" alt="dtrifonov" title="dtrifonov" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gadokrisztian"><img src="https://avatars1.githubusercontent.com/u/85160134?v=4" alt="gadokrisztian" title="gadokrisztian" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/geordee"><img src="https://avatars1.githubusercontent.com/u/83303?v=4" alt="geordee" title="geordee" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/guanting112"><img src="https://avatars1.githubusercontent.com/u/11306350?v=4" alt="guanting112" title="guanting112" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/iantuan"><img src="https://avatars1.githubusercontent.com/u/4869968?v=4" alt="iantuan" title="iantuan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ichenhe"><img src="https://avatars1.githubusercontent.com/u/10266066?v=4" alt="ichenhe" title="ichenhe" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rodrigoghm"><img src="https://avatars1.githubusercontent.com/u/66917643?v=4" alt="rodrigoghm" title="rodrigoghm" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/icibiri"><img src="https://avatars1.githubusercontent.com/u/32684966?v=4" alt="icibiri" title="icibiri" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jewe11er"><img src="https://avatars1.githubusercontent.com/u/47153959?v=4" alt="jewe11er" title="jewe11er" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jfloresremar"><img src="https://avatars1.githubusercontent.com/u/10441071?v=4" alt="jfloresremar" title="jfloresremar" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jingtianfeng"><img src="https://avatars1.githubusercontent.com/u/19503202?v=4" alt="jingtianfeng" title="jingtianfeng" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kilarusravankumar"><img src="https://avatars1.githubusercontent.com/u/13055113?v=4" alt="kilarusravankumar" title="kilarusravankumar" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/leandrobraga"><img src="https://avatars1.githubusercontent.com/u/506699?v=4" alt="leandrobraga" title="leandrobraga" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lfbos"><img src="https://avatars1.githubusercontent.com/u/5703286?v=4" alt="lfbos" title="lfbos" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lpintes"><img src="https://avatars1.githubusercontent.com/u/2546783?v=4" alt="lpintes" title="lpintes" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/macropas"><img src="https://avatars1.githubusercontent.com/u/7488502?v=4" alt="macropas" title="macropas" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/marcmmx"><img src="https://avatars1.githubusercontent.com/u/7670546?v=4" alt="marcmmx" title="marcmmx" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mark2b"><img src="https://avatars1.githubusercontent.com/u/539063?v=4" alt="mark2b" title="mark2b" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/miguel-devs"><img src="https://avatars1.githubusercontent.com/u/89543510?v=4" alt="miguel-devs" title="miguel-devs" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mihado"><img src="https://avatars1.githubusercontent.com/u/940981?v=4" alt="mihado" title="mihado" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mmckeen75"><img src="https://avatars1.githubusercontent.com/u/49529489?v=4" alt="mmckeen75" title="mmckeen75" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/narven"><img src="https://avatars1.githubusercontent.com/u/123594?v=4" alt="narven" title="narven" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/odas0r"><img src="https://avatars1.githubusercontent.com/u/32167770?v=4" alt="odas0r" title="odas0r" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/olaf-lexemo"><img src="https://avatars1.githubusercontent.com/u/51406599?v=4" alt="olaf-lexemo" title="olaf-lexemo" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/pitexplore"><img src="https://avatars1.githubusercontent.com/u/11956562?v=4" alt="pitexplore" title="pitexplore" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/pr123"><img src="https://avatars1.githubusercontent.com/u/23333176?v=4" alt="pr123" title="pr123" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rsousacode"><img src="https://avatars1.githubusercontent.com/u/34067397?v=4" alt="rsousacode" title="rsousacode" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/sankethpb"><img src="https://avatars1.githubusercontent.com/u/16034868?v=4" alt="sankethpb" title="sankethpb" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/wixregiga"><img src="https://avatars1.githubusercontent.com/u/30182903?v=4" alt="wixregiga" title="wixregiga" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/GeorgeFourikis"><img src="https://avatars1.githubusercontent.com/u/17906313?v=4" alt="GeorgeFourikis" title="GeorgeFourikis" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/saz59"><img src="https://avatars1.githubusercontent.com/u/9706793?v=4" alt="saz59" title="saz59" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/shadowfiga"><img src="https://avatars1.githubusercontent.com/u/42721390?v=4" alt="shadowfiga" title="shadowfiga" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/siriushaha"><img src="https://avatars1.githubusercontent.com/u/7924311?v=4" alt="siriushaha" title="siriushaha" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/skurtz97"><img src="https://avatars1.githubusercontent.com/u/71720714?v=4" alt="skurtz97" title="skurtz97" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/srinivasganti"><img src="https://avatars1.githubusercontent.com/u/2057165?v=4" alt="srinivasganti" title="srinivasganti" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/syrm"><img src="https://avatars1.githubusercontent.com/u/155406?v=4" alt="syrm" title="syrm" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/tuhao1020"><img src="https://avatars1.githubusercontent.com/u/26807520?v=4" alt="tuhao1020" title="tuhao1020" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/BlackHole1"><img src="https://avatars1.githubusercontent.com/u/8198408?v=4" alt="BlackHole1" title="BlackHole1" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/L-M-Sherlock"><img src="https://avatars1.githubusercontent.com/u/32575846?v=4" alt="L-M-Sherlock" title="L-M-Sherlock" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/claudemuller"><img src="https://avatars1.githubusercontent.com/u/8104894?v=4" alt="claudemuller" title="claudemuller" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/keymanye"><img src="https://avatars1.githubusercontent.com/u/9495010?v=4" alt="keymanye" title="keymanye" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/wahyuief"><img src="https://avatars1.githubusercontent.com/u/20138856?v=4" alt="wahyuief" title="wahyuief" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/xuyan2018"><img src="https://avatars1.githubusercontent.com/u/38712502?v=4" alt="xuyan2018" title="xuyan2018" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/xvalen"><img src="https://avatars1.githubusercontent.com/u/2307513?v=4" alt="xvalen" title="xvalen" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/xytis"><img src="https://avatars1.githubusercontent.com/u/78025?v=4" alt="xytis" title="xytis" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ElNovi"><img src="https://avatars1.githubusercontent.com/u/14199592?v=4" alt="ElNovi" title="ElNovi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/IpastorSan"><img src="https://avatars1.githubusercontent.com/u/54788305?v=4" alt="IpastorSan" title="IpastorSan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/KKP4"><img src="https://avatars1.githubusercontent.com/u/24271790?v=4" alt="KKP4" title="KKP4" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Lernakow"><img src="https://avatars1.githubusercontent.com/u/46821665?v=4" alt="Lernakow" title="Lernakow" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ernestocolombo"><img src="https://avatars1.githubusercontent.com/u/485538?v=4" alt="ernestocolombo" title="ernestocolombo" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/francisstephan"><img src="https://avatars1.githubusercontent.com/u/15109897?v=4" alt="francisstephan" title="francisstephan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/pixelheresy"><img src="https://avatars1.githubusercontent.com/u/2491944?v=4" alt="pixelheresy" title="pixelheresy" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rcapraro"><img src="https://avatars1.githubusercontent.com/u/245490?v=4" alt="rcapraro" title="rcapraro" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/soiestad"><img src="https://avatars1.githubusercontent.com/u/9642036?v=4" alt="soiestad" title="soiestad" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/spkarason"><img src="https://avatars1.githubusercontent.com/u/100413497?v=4" alt="spkarason" title="spkarason" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/thanasolykos"><img src="https://avatars1.githubusercontent.com/u/35801329?v=4" alt="thanasolykos" title="thanasolykos" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ukitzmann"><img src="https://avatars1.githubusercontent.com/u/153834?v=4" alt="ukitzmann" title="ukitzmann" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/DanielKirkwood"><img src="https://avatars1.githubusercontent.com/u/22101308?v=4" alt="DanielKirkwood" title="DanielKirkwood" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/colinf"><img src="https://avatars1.githubusercontent.com/u/530815?v=4" alt="colinf" title="colinf" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/simonproctor"><img src="https://avatars1.githubusercontent.com/u/203916?v=4" alt="simonproctor" title="simonproctor" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/FernandoLangOFC"><img src="https://avatars1.githubusercontent.com/u/84889316?v=4" alt="FernandoLangOFC" title="FernandoLangOFC" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Firdavs9512"><img src="https://avatars1.githubusercontent.com/u/102187486?v=4" alt="Firdavs9512" title="Firdavs9512" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Flammable-Duck"><img src="https://avatars1.githubusercontent.com/u/59183206?v=4" alt="Flammable-Duck" title="Flammable-Duck" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Gepetdo"><img src="https://avatars1.githubusercontent.com/u/5978138?v=4" alt="Gepetdo" title="Gepetdo" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Hongjian0619"><img src="https://avatars1.githubusercontent.com/u/25712119?v=4" alt="Hongjian0619" title="Hongjian0619" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/JoeD"><img src="https://avatars1.githubusercontent.com/u/247821?v=4" alt="JoeD" title="JoeD" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Jude-X"><img src="https://avatars1.githubusercontent.com/u/66228813?v=4" alt="Jude-X" title="Jude-X" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Kartoffelbot"><img src="https://avatars1.githubusercontent.com/u/130631591?v=4" alt="Kartoffelbot" title="Kartoffelbot" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/KevinZhouRafael"><img src="https://avatars1.githubusercontent.com/u/16298046?v=4" alt="KevinZhouRafael" title="KevinZhouRafael" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/KrishManohar"><img src="https://avatars1.githubusercontent.com/u/1992857?v=4" alt="KrishManohar" title="KrishManohar" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Laotanling"><img src="https://avatars1.githubusercontent.com/u/28570289?v=4" alt="Laotanling" title="Laotanling" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Longf99999"><img src="https://avatars1.githubusercontent.com/u/21210800?v=4" alt="Longf99999" title="Longf99999" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Lyansun"><img src="https://avatars1.githubusercontent.com/u/17959642?v=4" alt="Lyansun" title="Lyansun" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/MihaiPopescu1985"><img src="https://avatars1.githubusercontent.com/u/34679869?v=4" alt="MihaiPopescu1985" title="MihaiPopescu1985" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/TBNilles"><img src="https://avatars1.githubusercontent.com/u/88231081?v=4" alt="TBNilles" title="TBNilles" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ajanicij"><img src="https://avatars1.githubusercontent.com/u/1755297?v=4" alt="ajanicij" title="ajanicij" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/aprinslo1"><img src="https://avatars1.githubusercontent.com/u/711650?v=4" alt="aprinslo1" title="aprinslo1" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Mohammed8960"><img src="https://avatars1.githubusercontent.com/u/5219371?v=4" alt="Mohammed8960" title="Mohammed8960" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/NA"><img src="https://avatars1.githubusercontent.com/u/1600?v=4" alt="NA" title="NA" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Neulhan"><img src="https://avatars1.githubusercontent.com/u/52434903?v=4" alt="Neulhan" title="Neulhan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kyoukhana"><img src="https://avatars1.githubusercontent.com/u/756849?v=4" alt="kyoukhana" title="kyoukhana" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/spazzymoto"><img src="https://avatars1.githubusercontent.com/u/2951012?v=4" alt="spazzymoto" title="spazzymoto" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/victorgrey"><img src="https://avatars1.githubusercontent.com/u/207128?v=4" alt="victorgrey" title="victorgrey" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ArishSultan"><img src="https://avatars1.githubusercontent.com/u/31086233?v=4" alt="ArishSultan" title="ArishSultan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ehayun"><img src="https://avatars1.githubusercontent.com/u/39870648?v=4" alt="ehayun" title="ehayun" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kukaki"><img src="https://avatars1.githubusercontent.com/u/4849535?v=4" alt="kukaki" title="kukaki" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/oshirokazuhide"><img src="https://avatars1.githubusercontent.com/u/89958891?v=4" alt="oshirokazuhide" title="oshirokazuhide" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/t6tg"><img src="https://avatars1.githubusercontent.com/u/33445861?v=4" alt="t6tg" title="t6tg" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/15189573255"><img src="https://avatars1.githubusercontent.com/u/18551476?v=4" alt="15189573255" title="15189573255" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/AGPDev"><img src="https://avatars1.githubusercontent.com/u/5721341?v=4" alt="AGPDev" title="AGPDev" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/AnatolyUA"><img src="https://avatars1.githubusercontent.com/u/1446703?v=4" alt="AnatolyUA" title="AnatolyUA" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/AwsIT"><img src="https://avatars1.githubusercontent.com/u/40926862?v=4" alt="AwsIT" title="AwsIT" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/NguyenPhuoc"><img src="https://avatars1.githubusercontent.com/u/11747677?v=4" alt="NguyenPhuoc" title="NguyenPhuoc" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Oka00"><img src="https://avatars1.githubusercontent.com/u/72302007?v=4" alt="Oka00" title="Oka00" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/PaddyFrenchman"><img src="https://avatars1.githubusercontent.com/u/55139902?v=4" alt="PaddyFrenchman" title="PaddyFrenchman" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/RainerGevers"><img src="https://avatars1.githubusercontent.com/u/32453861?v=4" alt="RainerGevers" title="RainerGevers" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Ramblestsad"><img src="https://avatars1.githubusercontent.com/u/45003009?v=4" alt="Ramblestsad" title="Ramblestsad" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/SamuelNeves"><img src="https://avatars1.githubusercontent.com/u/10797137?v=4" alt="SamuelNeves" title="SamuelNeves" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Scorpio69t"><img src="https://avatars1.githubusercontent.com/u/24680141?v=4" alt="Scorpio69t" title="Scorpio69t" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Serissa4000"><img src="https://avatars1.githubusercontent.com/u/122253262?v=4" alt="Serissa4000" title="Serissa4000" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/TianJIANG"><img src="https://avatars1.githubusercontent.com/u/158459?v=4" alt="TianJIANG" title="TianJIANG" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Ubun1"><img src="https://avatars1.githubusercontent.com/u/13261595?v=4" alt="Ubun1" title="Ubun1" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/WangYajun39"><img src="https://avatars1.githubusercontent.com/u/27052258?v=4" alt="WangYajun39" title="WangYajun39" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/XinYoungCN"><img src="https://avatars1.githubusercontent.com/u/18415580?v=4" alt="XinYoungCN" title="XinYoungCN" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/YukinaMochizuki"><img src="https://avatars1.githubusercontent.com/u/26710554?v=4" alt="YukinaMochizuki" title="YukinaMochizuki" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/a112121788"><img src="https://avatars1.githubusercontent.com/u/1457920?v=4" alt="a112121788" title="a112121788" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/acdias"><img src="https://avatars1.githubusercontent.com/u/11966653?v=4" alt="acdias" title="acdias" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/aeonsthorn"><img src="https://avatars1.githubusercontent.com/u/53945065?v=4" alt="aeonsthorn" title="aeonsthorn" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/agent3bood"><img src="https://avatars1.githubusercontent.com/u/771902?v=4" alt="agent3bood" title="agent3bood" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ajb-neodynamics-io"><img src="https://avatars1.githubusercontent.com/u/115384296?v=4" alt="ajb-neodynamics-io" title="ajb-neodynamics-io" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/alessandromarotta"><img src="https://avatars1.githubusercontent.com/u/17084152?v=4" alt="alessandromarotta" title="alessandromarotta" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/algobot76"><img src="https://avatars1.githubusercontent.com/u/20016835?v=4" alt="algobot76" title="algobot76" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/algoflows"><img src="https://avatars1.githubusercontent.com/u/65465380?v=4" alt="algoflows" title="algoflows" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/angelaahhu"><img src="https://avatars1.githubusercontent.com/u/128401549?v=4" alt="angelaahhu" title="angelaahhu" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/anhxuanpham"><img src="https://avatars1.githubusercontent.com/u/101174797?v=4" alt="anhxuanpham" title="anhxuanpham" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/annieruci"><img src="https://avatars1.githubusercontent.com/u/49377699?v=4" alt="annieruci" title="annieruci" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/antoniejiao"><img src="https://avatars1.githubusercontent.com/u/17450960?v=4" alt="antoniejiao" title="antoniejiao" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/artman328"><img src="https://avatars1.githubusercontent.com/u/5415792?v=4" alt="artman328" title="artman328" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/b2cbd"><img src="https://avatars1.githubusercontent.com/u/6870050?v=4" alt="b2cbd" title="b2cbd" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/baoch254"><img src="https://avatars1.githubusercontent.com/u/74555344?v=4" alt="baoch254" title="baoch254" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/bastengao"><img src="https://avatars1.githubusercontent.com/u/785335?v=4" alt="bastengao" title="bastengao" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/beytullahakyuz"><img src="https://avatars1.githubusercontent.com/u/10866179?v=4" alt="beytullahakyuz" title="beytullahakyuz" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/bjoroen"><img src="https://avatars1.githubusercontent.com/u/31513139?v=4" alt="bjoroen" title="bjoroen" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/blackHoleNgc1277"><img src="https://avatars1.githubusercontent.com/u/41342763?v=4" alt="blackHoleNgc1277" title="blackHoleNgc1277" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/bunnycodego"><img src="https://avatars1.githubusercontent.com/u/81451316?v=4" alt="bunnycodego" title="bunnycodego" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/carlos-enginner"><img src="https://avatars1.githubusercontent.com/u/59775876?v=4" alt="carlos-enginner" title="carlos-enginner" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/centratelemedia"><img src="https://avatars1.githubusercontent.com/u/99481333?v=4" alt="centratelemedia" title="centratelemedia" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/chrismalek"><img src="https://avatars1.githubusercontent.com/u/9403?v=4" alt="chrismalek" title="chrismalek" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/civicwar"><img src="https://avatars1.githubusercontent.com/u/1858104?v=4" alt="civicwar" title="civicwar" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/cnzhangquan"><img src="https://avatars1.githubusercontent.com/u/5462876?v=4" alt="cnzhangquan" title="cnzhangquan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/cuong48d"><img src="https://avatars1.githubusercontent.com/u/456049?v=4" alt="cuong48d" title="cuong48d" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/damiensy"><img src="https://avatars1.githubusercontent.com/u/147525?v=4" alt="damiensy" title="damiensy" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/danlanxiaohei"><img src="https://avatars1.githubusercontent.com/u/3272530?v=4" alt="danlanxiaohei" title="danlanxiaohei" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dextercai"><img src="https://avatars1.githubusercontent.com/u/12377850?v=4" alt="dextercai" title="dextercai" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dfaugusto"><img src="https://avatars1.githubusercontent.com/u/1554920?v=4" alt="dfaugusto" title="dfaugusto" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dkzhang"><img src="https://avatars1.githubusercontent.com/u/1091431?v=4" alt="dkzhang" title="dkzhang" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dloprodu"><img src="https://avatars1.githubusercontent.com/u/664947?v=4" alt="dloprodu" title="dloprodu" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/donam-givita"><img src="https://avatars1.githubusercontent.com/u/107529604?v=4" alt="donam-givita" title="donam-givita" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dph0899"><img src="https://avatars1.githubusercontent.com/u/124650663?v=4" alt="dph0899" title="dph0899" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dvitale"><img src="https://avatars1.githubusercontent.com/u/17982034?v=4" alt="dvitale" title="dvitale" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ec0629"><img src="https://avatars1.githubusercontent.com/u/7861125?v=4" alt="ec0629" title="ec0629" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/edwindna2"><img src="https://avatars1.githubusercontent.com/u/5441354?v=4" alt="edwindna2" title="edwindna2" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ekiyooka"><img src="https://avatars1.githubusercontent.com/u/44221187?v=4" alt="ekiyooka" title="ekiyooka" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ekofedriyanto"><img src="https://avatars1.githubusercontent.com/u/1669439?v=4" alt="ekofedriyanto" title="ekofedriyanto" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/eli-yip"><img src="https://avatars1.githubusercontent.com/u/40079533?v=4" alt="eli-yip" title="eli-yip" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/eljefedelrodeodeljefe"><img src="https://avatars1.githubusercontent.com/u/3899684?v=4" alt="eljefedelrodeodeljefe" title="eljefedelrodeodeljefe" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/fenriz07"><img src="https://avatars1.githubusercontent.com/u/9199380?v=4" alt="fenriz07" title="fenriz07" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ffelipelimao"><img src="https://avatars1.githubusercontent.com/u/28612817?v=4" alt="ffelipelimao" title="ffelipelimao" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/frenchmajesty"><img src="https://avatars1.githubusercontent.com/u/24761660?v=4" alt="frenchmajesty" title="frenchmajesty" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gastropulgite"><img src="https://avatars1.githubusercontent.com/u/85067528?v=4" alt="gastropulgite" title="gastropulgite" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/geGao123"><img src="https://avatars1.githubusercontent.com/u/6398228?v=4" alt="geGao123" title="geGao123" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/globalflea"><img src="https://avatars1.githubusercontent.com/u/127675?v=4" alt="globalflea" title="globalflea" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gloudx"><img src="https://avatars1.githubusercontent.com/u/6920756?v=4" alt="gloudx" title="gloudx" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gnosthi"><img src="https://avatars1.githubusercontent.com/u/17650528?v=4" alt="gnosthi" title="gnosthi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gogoswift"><img src="https://avatars1.githubusercontent.com/u/14092975?v=4" alt="gogoswift" title="gogoswift" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/goten002"><img src="https://avatars1.githubusercontent.com/u/5025060?v=4" alt="goten002" title="goten002" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/guanzi008"><img src="https://avatars1.githubusercontent.com/u/20619190?v=4" alt="guanzi008" title="guanzi008" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hdezoscar93"><img src="https://avatars1.githubusercontent.com/u/21270107?v=4" alt="hdezoscar93" title="hdezoscar93" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hieungm"><img src="https://avatars1.githubusercontent.com/u/85067528?v=4" alt="hieungm" title="hieungm" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hieunmg"><img src="https://avatars1.githubusercontent.com/u/85067528?v=4" alt="hieunmg" title="hieunmg" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/homerious"><img src="https://avatars1.githubusercontent.com/u/22523525?v=4" alt="homerious" title="homerious" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hzxd"><img src="https://avatars1.githubusercontent.com/u/3376231?v=4" alt="hzxd" title="hzxd" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/inyellowbus"><img src="https://avatars1.githubusercontent.com/u/8218128?v=4" alt="inyellowbus" title="inyellowbus" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/iuliancarnaru"><img src="https://avatars1.githubusercontent.com/u/35683015?v=4" alt="iuliancarnaru" title="iuliancarnaru" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/iysaleh"><img src="https://avatars1.githubusercontent.com/u/13583253?v=4" alt="iysaleh" title="iysaleh" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jackptoke"><img src="https://avatars1.githubusercontent.com/u/54049012?v=4" alt="jackptoke" title="jackptoke" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jackysywk"><img src="https://avatars1.githubusercontent.com/u/61909173?v=4" alt="jackysywk" title="jackysywk" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jeff2go"><img src="https://avatars1.githubusercontent.com/u/6629280?v=4" alt="jeff2go" title="jeff2go" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jeremiahyan"><img src="https://avatars1.githubusercontent.com/u/2705359?v=4" alt="jeremiahyan" title="jeremiahyan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/joelywz"><img src="https://avatars1.githubusercontent.com/u/43310636?v=4" alt="joelywz" title="joelywz" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kamolcu"><img src="https://avatars1.githubusercontent.com/u/5095235?v=4" alt="kamolcu" title="kamolcu" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kana99"><img src="https://avatars1.githubusercontent.com/u/3714069?v=4" alt="kana99" title="kana99" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/edsongley"><img src="https://avatars1.githubusercontent.com/u/35545454?v=4" alt="edsongley" title="edsongley" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/katsubushiken"><img src="https://avatars1.githubusercontent.com/u/43208445?v=4" alt="katsubushiken" title="katsubushiken" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kattaprasanth"><img src="https://avatars1.githubusercontent.com/u/13375911?v=4" alt="kattaprasanth" title="kattaprasanth" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/keeio"><img src="https://avatars1.githubusercontent.com/u/147525?v=4" alt="keeio" title="keeio" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/keval6706"><img src="https://avatars1.githubusercontent.com/u/36534030?v=4" alt="keval6706" title="keval6706" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/khasanovrs"><img src="https://avatars1.githubusercontent.com/u/6076966?v=4" alt="khasanovrs" title="khasanovrs" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kkdaypenny"><img src="https://avatars1.githubusercontent.com/u/47559431?v=4" alt="kkdaypenny" title="kkdaypenny" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/knavels"><img src="https://avatars1.githubusercontent.com/u/57287952?v=4" alt="knavels" title="knavels" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kohakuhubo"><img src="https://avatars1.githubusercontent.com/u/32786755?v=4" alt="kohakuhubo" title="kohakuhubo" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/korowiov"><img src="https://avatars1.githubusercontent.com/u/5020824?v=4" alt="korowiov" title="korowiov" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/kostasvk"><img src="https://avatars1.githubusercontent.com/u/8888490?v=4" alt="kostasvk" title="kostasvk" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lafayetteDan"><img src="https://avatars1.githubusercontent.com/u/26064396?v=4" alt="lafayetteDan" title="lafayetteDan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lbsubash"><img src="https://avatars1.githubusercontent.com/u/101740735?v=4" alt="lbsubash" title="lbsubash" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/leki75"><img src="https://avatars1.githubusercontent.com/u/9675379?v=4" alt="leki75" title="leki75" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lemuelroberto"><img src="https://avatars1.githubusercontent.com/u/322159?v=4" alt="lemuelroberto" title="lemuelroberto" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/liheyuan"><img src="https://avatars1.githubusercontent.com/u/776423?v=4" alt="liheyuan" title="liheyuan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lingyingtan"><img src="https://avatars1.githubusercontent.com/u/15610136?v=4" alt="lingyingtan" title="lingyingtan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/linuxluigi"><img src="https://avatars1.githubusercontent.com/u/8136842?v=4" alt="linuxluigi" title="linuxluigi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lipatti"><img src="https://avatars1.githubusercontent.com/u/38935867?v=4" alt="lipatti" title="lipatti" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/maikelcoke"><img src="https://avatars1.githubusercontent.com/u/51384?v=4" alt="maikelcoke" title="maikelcoke" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/marek-kuticka"><img src="https://avatars1.githubusercontent.com/u/1578756?v=4" alt="marek-kuticka" title="marek-kuticka" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/marman-hp"><img src="https://avatars1.githubusercontent.com/u/2398413?v=4" alt="marman-hp" title="marman-hp" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mattbowen"><img src="https://avatars1.githubusercontent.com/u/46803?v=4" alt="mattbowen" title="mattbowen" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/maxgozou"><img src="https://avatars1.githubusercontent.com/u/54620900?v=4" alt="maxgozou" title="maxgozou" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/maxgozzz"><img src="https://avatars1.githubusercontent.com/u/54620900?v=4" alt="maxgozzz" title="maxgozzz" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mitas"><img src="https://avatars1.githubusercontent.com/u/954460?v=4" alt="mitas" title="mitas" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mizzlespot"><img src="https://avatars1.githubusercontent.com/u/2654538?v=4" alt="mizzlespot" title="mizzlespot" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mkell43"><img src="https://avatars1.githubusercontent.com/u/362697?v=4" alt="mkell43" title="mkell43" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mnievesco"><img src="https://avatars1.githubusercontent.com/u/78430169?v=4" alt="mnievesco" title="mnievesco" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mo3lyana"><img src="https://avatars1.githubusercontent.com/u/4528809?v=4" alt="mo3lyana" title="mo3lyana" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/motogo"><img src="https://avatars1.githubusercontent.com/u/1704958?v=4" alt="motogo" title="motogo" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mtrense"><img src="https://avatars1.githubusercontent.com/u/1008285?v=4" alt="mtrense" title="mtrense" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mukunhao"><img src="https://avatars1.githubusercontent.com/u/45845255?v=4" alt="mukunhao" title="mukunhao" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mulyawansentosa"><img src="https://avatars1.githubusercontent.com/u/29946673?v=4" alt="mulyawansentosa" title="mulyawansentosa" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/nasoma"><img src="https://avatars1.githubusercontent.com/u/19878418?v=4" alt="nasoma" title="nasoma" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ngseiyu"><img src="https://avatars1.githubusercontent.com/u/44496936?v=4" alt="ngseiyu" title="ngseiyu" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/nikharsaxena"><img src="https://avatars1.githubusercontent.com/u/8684362?v=4" alt="nikharsaxena" title="nikharsaxena" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/nronzel"><img src="https://avatars1.githubusercontent.com/u/86695181?v=4" alt="nronzel" title="nronzel" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/odelanno"><img src="https://avatars1.githubusercontent.com/u/63109824?v=4" alt="odelanno" title="odelanno" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/onlysumitg"><img src="https://avatars1.githubusercontent.com/u/1676132?v=4" alt="onlysumitg" title="onlysumitg" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/xPoppa"><img src="https://avatars1.githubusercontent.com/u/119574198?v=4" alt="xPoppa" title="xPoppa" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/yesudeep"><img src="https://avatars1.githubusercontent.com/u/3874?v=4" alt="yesudeep" title="yesudeep" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ymonk"><img src="https://avatars1.githubusercontent.com/u/13493968?v=4" alt="ymonk" title="ymonk" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/yonson2"><img src="https://avatars1.githubusercontent.com/u/1192599?v=4" alt="yonson2" title="yonson2" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/yshengliao"><img src="https://avatars1.githubusercontent.com/u/13849858?v=4" alt="yshengliao" title="yshengliao" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ytxmobile98"><img src="https://avatars1.githubusercontent.com/u/5900105?v=4" alt="ytxmobile98" title="ytxmobile98" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/yusong-offx"><img src="https://avatars1.githubusercontent.com/u/75306828?v=4" alt="yusong-offx" title="yusong-offx" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/zhenggangpku"><img src="https://avatars1.githubusercontent.com/u/18161030?v=4" alt="zhenggangpku" title="zhenggangpku" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/zou8944"><img src="https://avatars1.githubusercontent.com/u/18495995?v=4" alt="zou8944" title="zou8944" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/SergeShin"><img src="https://avatars1.githubusercontent.com/u/402395?v=4" alt="SergeShin" title="SergeShin" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/-"><img src="https://avatars1.githubusercontent.com/u/75544?v=4" alt="-" title="-" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/BelmonduS"><img src="https://avatars1.githubusercontent.com/u/159350?v=4" alt="BelmonduS" title="BelmonduS" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Diewald"><img src="https://avatars1.githubusercontent.com/u/6187336?v=4" alt="Diewald" title="Diewald" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/cty4ka"><img src="https://avatars1.githubusercontent.com/u/29261879?v=4" alt="cty4ka" title="cty4ka" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/martinjanda"><img src="https://avatars1.githubusercontent.com/u/122393?v=4" alt="martinjanda" title="martinjanda" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/evan"><img src="https://avatars1.githubusercontent.com/u/210?v=4" alt="evan" title="evan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/hazmi-e205"><img src="https://avatars1.githubusercontent.com/u/12555465?v=4" alt="hazmi-e205" title="hazmi-e205" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/jtgoral"><img src="https://avatars1.githubusercontent.com/u/19780595?v=4" alt="jtgoral" title="jtgoral" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ky2s"><img src="https://avatars1.githubusercontent.com/u/19502125?v=4" alt="ky2s" title="ky2s" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lauweliam"><img src="https://avatars1.githubusercontent.com/u/4064517?v=4" alt="lauweliam" title="lauweliam" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ozfive"><img src="https://avatars1.githubusercontent.com/u/4494266?v=4" alt="ozfive" title="ozfive" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/paulcockrell"><img src="https://avatars1.githubusercontent.com/u/260514?v=4" alt="paulcockrell" title="paulcockrell" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/paulxu21"><img src="https://avatars1.githubusercontent.com/u/6261758?v=4" alt="paulxu21" title="paulxu21" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/pesquive"><img src="https://avatars1.githubusercontent.com/u/6610140?v=4" alt="pesquive" title="pesquive" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/petros9282"><img src="https://avatars1.githubusercontent.com/u/3861890?v=4" alt="petros9282" title="petros9282" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/phil535"><img src="https://avatars1.githubusercontent.com/u/7596830?v=4" alt="phil535" title="phil535" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/pitt134"><img src="https://avatars1.githubusercontent.com/u/13091629?v=4" alt="pitt134" title="pitt134" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/poscard"><img src="https://avatars1.githubusercontent.com/u/3023318?v=4" alt="poscard" title="poscard" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/qiepeipei"><img src="https://avatars1.githubusercontent.com/u/16110628?v=4" alt="qiepeipei" title="qiepeipei" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/qiuzhanghua"><img src="https://avatars1.githubusercontent.com/u/478393?v=4" alt="qiuzhanghua" title="qiuzhanghua" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rapita"><img src="https://avatars1.githubusercontent.com/u/22305375?v=4" alt="rapita" title="rapita" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rbondi"><img src="https://avatars1.githubusercontent.com/u/81764?v=4" alt="rbondi" title="rbondi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/relaera"><img src="https://avatars1.githubusercontent.com/u/26012106?v=4" alt="relaera" title="relaera" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/remopavithran"><img src="https://avatars1.githubusercontent.com/u/50388068?v=4" alt="remopavithran" title="remopavithran" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rfunix"><img src="https://avatars1.githubusercontent.com/u/6026357?v=4" alt="rfunix" title="rfunix" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rhernandez-itemsoft"><img src="https://avatars1.githubusercontent.com/u/4327356?v=4" alt="rhernandez-itemsoft" title="rhernandez-itemsoft" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rikoriswandha"><img src="https://avatars1.githubusercontent.com/u/2549929?v=4" alt="rikoriswandha" title="rikoriswandha" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/risallaw"><img src="https://avatars1.githubusercontent.com/u/15353146?v=4" alt="risallaw" title="risallaw" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/robivictor"><img src="https://avatars1.githubusercontent.com/u/761041?v=4" alt="robivictor" title="robivictor" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rubiagatra"><img src="https://avatars1.githubusercontent.com/u/7299491?v=4" alt="rubiagatra" title="rubiagatra" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rubyangxg"><img src="https://avatars1.githubusercontent.com/u/3069914?v=4" alt="rubyangxg" title="rubyangxg" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/rxrw"><img src="https://avatars1.githubusercontent.com/u/9566402?v=4" alt="rxrw" title="rxrw" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/saleebm"><img src="https://avatars1.githubusercontent.com/u/34875122?v=4" alt="saleebm" title="saleebm" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/sbenimeli"><img src="https://avatars1.githubusercontent.com/u/46652122?v=4" alt="sbenimeli" title="sbenimeli" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/sebyno"><img src="https://avatars1.githubusercontent.com/u/15988169?v=4" alt="sebyno" title="sebyno" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/seun-otosho"><img src="https://avatars1.githubusercontent.com/u/74518370?v=4" alt="seun-otosho" title="seun-otosho" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/shobhitsinghal77"><img src="https://avatars1.githubusercontent.com/u/26848221?v=4" alt="shobhitsinghal77" title="shobhitsinghal77" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/solohiroshi"><img src="https://avatars1.githubusercontent.com/u/96872274?v=4" alt="solohiroshi" title="solohiroshi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/su1gen"><img src="https://avatars1.githubusercontent.com/u/86298730?v=4" alt="su1gen" title="su1gen" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/sukiejosh"><img src="https://avatars1.githubusercontent.com/u/44656210?v=4" alt="sukiejosh" title="sukiejosh" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/suresh16671"><img src="https://avatars1.githubusercontent.com/u/57644510?v=4" alt="suresh16671" title="suresh16671" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/svirmi"><img src="https://avatars1.githubusercontent.com/u/52601346?v=4" alt="svirmi" title="svirmi" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/terjelafton"><img src="https://avatars1.githubusercontent.com/u/12574755?v=4" alt="terjelafton" title="terjelafton" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/thiennguyen93"><img src="https://avatars1.githubusercontent.com/u/60094052?v=4" alt="thiennguyen93" title="thiennguyen93" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/unixedia"><img src="https://avatars1.githubusercontent.com/u/70646128?v=4" alt="unixedia" title="unixedia" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/vadgun"><img src="https://avatars1.githubusercontent.com/u/22282464?v=4" alt="vadgun" title="vadgun" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/valsorym"><img src="https://avatars1.githubusercontent.com/u/4440262?v=4" alt="valsorym" title="valsorym" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/vguhesan"><img src="https://avatars1.githubusercontent.com/u/193960?v=4" alt="vguhesan" title="vguhesan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/vpiduri"><img src="https://avatars1.githubusercontent.com/u/19339398?v=4" alt="vpiduri" title="vpiduri" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/vrocadev"><img src="https://avatars1.githubusercontent.com/u/50081969?v=4" alt="vrocadev" title="vrocadev" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/vuhoanglam"><img src="https://avatars1.githubusercontent.com/u/59502855?v=4" alt="vuhoanglam" title="vuhoanglam" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/walter-wang"><img src="https://avatars1.githubusercontent.com/u/7950295?v=4" alt="walter-wang" title="walter-wang" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/martinlindhe"><img src="https://avatars1.githubusercontent.com/u/181531?v=4" alt="martinlindhe" title="martinlindhe" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mdamschen"><img src="https://avatars1.githubusercontent.com/u/40914728?v=4" alt="mdamschen" title="mdamschen" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/letmestudy"><img src="https://avatars1.githubusercontent.com/u/31943708?v=4" alt="letmestudy" title="letmestudy" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/michaelsmanley"><img src="https://avatars1.githubusercontent.com/u/93241?v=4" alt="michaelsmanley" title="michaelsmanley" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/Curtman"><img src="https://avatars1.githubusercontent.com/u/543481?v=4" alt="Curtman" title="Curtman" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/SridarDhandapani"><img src="https://avatars1.githubusercontent.com/u/18103118?v=4" alt="SridarDhandapani" title="SridarDhandapani" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/madrigaltenor"><img src="https://avatars1.githubusercontent.com/u/168838315?v=4" alt="madrigaltenor" title="madrigaltenor" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/opusmagna"><img src="https://avatars1.githubusercontent.com/u/33766678?v=4" alt="opusmagna" title="opusmagna" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ShahramMebashar"><img src="https://avatars1.githubusercontent.com/u/25268287?v=4" alt="ShahramMebashar" title="ShahramMebashar" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/b4zz4r"><img src="https://avatars1.githubusercontent.com/u/7438782?v=4" alt="b4zz4r" title="b4zz4r" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/bobmcallan"><img src="https://avatars1.githubusercontent.com/u/8773580?v=4" alt="bobmcallan" title="bobmcallan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/fangli"><img src="https://avatars1.githubusercontent.com/u/3032639?v=4" alt="fangli" title="fangli" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/galois-tnp"><img src="https://avatars1.githubusercontent.com/u/41128011?v=4" alt="galois-tnp" title="galois-tnp" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mblandr"><img src="https://avatars1.githubusercontent.com/u/42862020?v=4" alt="mblandr" title="mblandr" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/midhubalan"><img src="https://avatars1.githubusercontent.com/u/13059634?v=4" alt="midhubalan" title="midhubalan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/netbaalzovf"><img src="https://avatars1.githubusercontent.com/u/98529711?v=4" alt="netbaalzovf" title="netbaalzovf" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/oliverjosefzimmer"><img src="https://avatars1.githubusercontent.com/u/24566297?v=4" alt="oliverjosefzimmer" title="oliverjosefzimmer" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/peacememories"><img src="https://avatars1.githubusercontent.com/u/1326334?v=4" alt="peacememories" title="peacememories" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/talebisinan"><img src="https://avatars1.githubusercontent.com/u/42139005?v=4" alt="talebisinan" title="talebisinan" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/valkuere"><img src="https://avatars1.githubusercontent.com/u/7230144?v=4" alt="valkuere" title="valkuere" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/lfaynman"><img src="https://avatars1.githubusercontent.com/u/16815068?v=4" alt="lfaynman" title="lfaynman" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/ArturWierzbicki"><img src="https://avatars1.githubusercontent.com/u/23451458?v=4" alt="ArturWierzbicki" title="ArturWierzbicki" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/aaxx"><img src="https://avatars1.githubusercontent.com/u/476416?v=4" alt="aaxx" title="aaxx" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/crashCoder"><img src="https://avatars1.githubusercontent.com/u/1144298?v=4" alt="crashCoder" title="crashCoder" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/derekslenk"><img src="https://avatars1.githubusercontent.com/u/42957?v=4" alt="derekslenk" title="derekslenk" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/dochoaj"><img src="https://avatars1.githubusercontent.com/u/1789678?v=4" alt="dochoaj" title="dochoaj" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/evillgenius75"><img src="https://avatars1.githubusercontent.com/u/22817701?v=4" alt="evillgenius75" title="evillgenius75" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/gog200921"><img src="https://avatars1.githubusercontent.com/u/101519620?v=4" alt="gog200921" title="gog200921" width="75" height="75" style="width:75px;max-width:75px;height:75px" /></a>
<a href="https://github.com/mauricedcastro"><img src="https://avatars1.githubusercontent.com/u/6446532?v=4" alt="mauricedcastro" title="mauricedcastro" wid
gitextract_sx40lk7k/
├── .deepsource.toml
├── .fossa.yml
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── custom.md
│ │ └── feature_request.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ ├── scripts/
│ │ └── setup_examples_test.bash
│ └── workflows/
│ ├── ci.yml
│ └── codeql-analysis.yml
├── .gitignore
├── AUTHORS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── FAQ.md
├── HISTORY.md
├── LICENSE
├── NOTICE
├── README.md
├── README_AR.md
├── README_ES.md
├── README_FA.md
├── README_FR.md
├── README_GR.md
├── README_JA.md
├── README_KO.md
├── README_PT_BR.md
├── README_RU.md
├── README_VN.md
├── README_ZH.md
├── README_ZH_HANS.md
├── README_ZH_HANT.md
├── SECURITY.md
├── VERSION
├── _benchmarks/
│ ├── README.md
│ └── view/
│ ├── README.md
│ ├── ace/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.ace
│ │ ├── layouts/
│ │ │ └── main.ace
│ │ └── partials/
│ │ └── footer.ace
│ ├── blocks/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── django/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── handlebars/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── html/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.html
│ │ ├── layouts/
│ │ │ └── main.html
│ │ └── partials/
│ │ └── footer.html
│ ├── jet/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.jet
│ │ ├── layouts/
│ │ │ └── main.jet
│ │ └── partials/
│ │ └── footer.jet
│ ├── pug/
│ │ ├── main.go
│ │ └── views/
│ │ ├── index.pug
│ │ ├── layouts/
│ │ │ └── main.pug
│ │ └── partials/
│ │ └── footer.pug
│ └── tests.yml
├── _examples/
│ ├── README.md
│ ├── README_ZH_HANT.md
│ ├── apidoc/
│ │ └── swagger/
│ │ └── README.md
│ ├── auth/
│ │ ├── auth/
│ │ │ ├── README.md
│ │ │ ├── auth.yml
│ │ │ ├── main.go
│ │ │ ├── user.go
│ │ │ ├── user_provider.go
│ │ │ └── views/
│ │ │ ├── layouts/
│ │ │ │ └── main.html
│ │ │ ├── partials/
│ │ │ │ └── footer.html
│ │ │ └── signin.html
│ │ ├── basicauth/
│ │ │ ├── basic/
│ │ │ │ ├── main.go
│ │ │ │ └── main_test.go
│ │ │ ├── database/
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── README.md
│ │ │ │ ├── docker-compose.yml
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ └── migration/
│ │ │ │ └── db.sql
│ │ │ ├── users_file_bcrypt/
│ │ │ │ ├── main.go
│ │ │ │ └── users.yml
│ │ │ └── users_list/
│ │ │ └── main.go
│ │ ├── cors/
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ ├── index.html
│ │ │ └── main.js
│ │ ├── goth/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── index.html
│ │ │ └── user.html
│ │ ├── hcaptcha/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── register_form.html
│ │ ├── jwt/
│ │ │ ├── basic/
│ │ │ │ └── main.go
│ │ │ ├── blocklist/
│ │ │ │ └── main.go
│ │ │ ├── middleware/
│ │ │ │ └── main.go
│ │ │ ├── refresh-token/
│ │ │ │ ├── main.go
│ │ │ │ ├── rsa_private_key.pem
│ │ │ │ └── rsa_public_key.pem
│ │ │ └── tutorial/
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── auth.go
│ │ │ │ ├── router.go
│ │ │ │ └── todo.go
│ │ │ ├── domain/
│ │ │ │ ├── model/
│ │ │ │ │ ├── role.go
│ │ │ │ │ ├── todo.go
│ │ │ │ │ └── user.go
│ │ │ │ └── repository/
│ │ │ │ ├── samples.go
│ │ │ │ ├── todo_repository.go
│ │ │ │ └── user_repository.go
│ │ │ ├── go-client/
│ │ │ │ ├── README.md
│ │ │ │ ├── client.go
│ │ │ │ └── main.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── util/
│ │ │ ├── app.go
│ │ │ ├── clock.go
│ │ │ ├── password.go
│ │ │ └── uuid.go
│ │ ├── permissions/
│ │ │ └── main.go
│ │ └── recaptcha/
│ │ ├── custom_form/
│ │ │ └── main.go
│ │ └── main.go
│ ├── bootstrapper/
│ │ ├── bootstrap/
│ │ │ └── bootstrapper.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── main_test.go
│ │ ├── middleware/
│ │ │ └── identity/
│ │ │ └── identity.go
│ │ ├── routes/
│ │ │ ├── follower.go
│ │ │ ├── following.go
│ │ │ ├── index.go
│ │ │ ├── like.go
│ │ │ └── routes.go
│ │ └── views/
│ │ ├── index.html
│ │ └── shared/
│ │ ├── error.html
│ │ └── layout.html
│ ├── caddy/
│ │ ├── Caddyfile
│ │ ├── README.md
│ │ ├── server1/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── index.html
│ │ │ └── shared/
│ │ │ └── layout.html
│ │ └── server2/
│ │ └── main.go
│ ├── compression/
│ │ ├── client/
│ │ │ └── main.go
│ │ ├── client-using-iris/
│ │ │ └── main.go
│ │ ├── main.go
│ │ └── main_test.go
│ ├── configuration/
│ │ ├── from-configuration-structure/
│ │ │ └── main.go
│ │ ├── from-toml-file/
│ │ │ ├── configs/
│ │ │ │ └── iris.tml
│ │ │ └── main.go
│ │ ├── from-yaml-file/
│ │ │ ├── configs/
│ │ │ │ └── iris.yml
│ │ │ ├── main.go
│ │ │ └── shared-configuration/
│ │ │ └── main.go
│ │ ├── functional/
│ │ │ └── main.go
│ │ ├── multi-environments/
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── configuration.go
│ │ │ │ └── server.go
│ │ │ ├── cmd/
│ │ │ │ └── root_command.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ ├── server.dev.yml
│ │ │ └── server.yml
│ │ └── viper/
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── config.yml
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── convert-handlers/
│ │ ├── negroni-like/
│ │ │ └── main.go
│ │ ├── nethttp/
│ │ │ ├── main.go
│ │ │ └── wrapper/
│ │ │ └── main.go
│ │ └── real-usecase-raven/
│ │ ├── wrapping-the-router/
│ │ │ └── main.go
│ │ └── writing-middleware/
│ │ └── main.go
│ ├── cookies/
│ │ ├── basic/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── options/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── securecookie/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── database/
│ │ ├── mongodb/
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ └── store/
│ │ │ │ └── movie.go
│ │ │ ├── docker-compose.yml
│ │ │ ├── env/
│ │ │ │ └── env.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── httputil/
│ │ │ │ └── error.go
│ │ │ ├── main.go
│ │ │ └── store/
│ │ │ └── movie.go
│ │ ├── mysql/
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── api.go
│ │ │ │ ├── category_handler.go
│ │ │ │ ├── helper.go
│ │ │ │ ├── httperror.go
│ │ │ │ ├── middleware/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── product_handler.go
│ │ │ ├── cache/
│ │ │ │ └── groupcache.go
│ │ │ ├── docker-compose.yml
│ │ │ ├── entity/
│ │ │ │ ├── category.go
│ │ │ │ └── product.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ ├── migration/
│ │ │ │ ├── api_category/
│ │ │ │ │ ├── create_category.json
│ │ │ │ │ ├── insert_products_category.json
│ │ │ │ │ ├── update_category.json
│ │ │ │ │ └── update_partial_category.json
│ │ │ │ ├── api_postman.json
│ │ │ │ ├── api_product/
│ │ │ │ │ ├── create_product.json
│ │ │ │ │ ├── update_partial_product.json
│ │ │ │ │ └── update_product.json
│ │ │ │ └── db.sql
│ │ │ ├── service/
│ │ │ │ ├── category_service.go
│ │ │ │ ├── category_service_test.go
│ │ │ │ └── product_service.go
│ │ │ └── sql/
│ │ │ ├── mysql.go
│ │ │ ├── service.go
│ │ │ └── sql.go
│ │ ├── orm/
│ │ │ ├── gorm/
│ │ │ │ ├── REAMDE.md
│ │ │ │ └── main.go
│ │ │ ├── reform/
│ │ │ │ ├── controllers/
│ │ │ │ │ └── person_controller.go
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ ├── models/
│ │ │ │ │ ├── person.go
│ │ │ │ │ └── person_reform.go
│ │ │ │ └── postman_collection.json
│ │ │ └── sqlx/
│ │ │ └── main.go
│ │ └── sqlx/
│ │ └── main.go
│ ├── dependency-injection/
│ │ ├── basic/
│ │ │ ├── main.go
│ │ │ └── middleware/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── context-register-dependency/
│ │ │ └── main.go
│ │ ├── jwt/
│ │ │ ├── contrib/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── main.go
│ │ │ └── main.go
│ │ ├── overview/
│ │ │ ├── datamodels/
│ │ │ │ └── movie.go
│ │ │ ├── datasource/
│ │ │ │ └── movies.go
│ │ │ ├── main.go
│ │ │ ├── repositories/
│ │ │ │ └── movie_repository.go
│ │ │ ├── services/
│ │ │ │ └── movie_service.go
│ │ │ └── web/
│ │ │ ├── middleware/
│ │ │ │ └── basicauth.go
│ │ │ ├── routes/
│ │ │ │ ├── hello.go
│ │ │ │ └── movies.go
│ │ │ └── views/
│ │ │ └── hello/
│ │ │ ├── index.html
│ │ │ └── name.html
│ │ ├── sessions/
│ │ │ ├── main.go
│ │ │ └── routes/
│ │ │ └── index.go
│ │ └── smart-contract/
│ │ └── main.go
│ ├── desktop/
│ │ ├── blink/
│ │ │ └── main.go
│ │ ├── lorca/
│ │ │ └── main.go
│ │ └── webview/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── dropzonejs/
│ │ ├── README.md
│ │ ├── README_PART2.md
│ │ ├── meta.yml
│ │ └── src/
│ │ ├── main.go
│ │ ├── public/
│ │ │ ├── css/
│ │ │ │ └── dropzone.css
│ │ │ └── js/
│ │ │ └── dropzone.js
│ │ └── views/
│ │ └── upload.html
│ ├── file-server/
│ │ ├── basic/
│ │ │ ├── assets/
│ │ │ │ ├── app2/
│ │ │ │ │ ├── app22/
│ │ │ │ │ │ └── just_a_text_no_index.txt
│ │ │ │ │ ├── app2app3/
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── assets.system/
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ └── test.txt
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── embedding-files-into-app/
│ │ │ ├── assets/
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── embedding-files-into-app-bindata/
│ │ │ ├── assets/
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── embedding-gzipped-files-into-app-bindata/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── favicon/
│ │ │ └── main.go
│ │ ├── file-server/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── dirlist.html
│ │ │ └── upload.html
│ │ ├── http2push/
│ │ │ ├── assets/
│ │ │ │ ├── app2/
│ │ │ │ │ ├── app2app3/
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ └── main.css
│ │ │ │ │ │ ├── dirs/
│ │ │ │ │ │ │ ├── dir1/
│ │ │ │ │ │ │ │ └── text.txt
│ │ │ │ │ │ │ ├── dir2/
│ │ │ │ │ │ │ │ └── text.txt
│ │ │ │ │ │ │ └── text.txt
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── mydir/
│ │ │ │ │ └── text.txt
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── main.js
│ │ │ ├── main.go
│ │ │ ├── mycert.crt
│ │ │ └── mykey.key
│ │ ├── http2push-embedded/
│ │ │ ├── bindata.go
│ │ │ └── main.go
│ │ ├── http2push-embedded-gzipped/
│ │ │ ├── bindata.go
│ │ │ └── main.go
│ │ ├── send-files/
│ │ │ └── main.go
│ │ ├── single-page-application/
│ │ │ ├── basic/
│ │ │ │ ├── main.go
│ │ │ │ └── public/
│ │ │ │ ├── index.html
│ │ │ │ └── index.js
│ │ │ ├── embedded-single-page-application/
│ │ │ │ ├── bindata.go
│ │ │ │ ├── data/
│ │ │ │ │ ├── public/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── app2/
│ │ │ │ │ │ │ └── index.html
│ │ │ │ │ │ └── css/
│ │ │ │ │ │ └── main.css
│ │ │ │ │ └── views/
│ │ │ │ │ └── index.html
│ │ │ │ ├── main.go
│ │ │ │ └── main_test.go
│ │ │ └── embedded-single-page-application-with-other-routes/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ ├── app.js
│ │ │ ├── css/
│ │ │ │ └── main.css
│ │ │ └── index.html
│ │ ├── spa-vue-router/
│ │ │ ├── frontend/
│ │ │ │ ├── css/
│ │ │ │ │ └── page.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── app.js
│ │ │ └── main.go
│ │ ├── subdomain/
│ │ │ ├── assets/
│ │ │ │ ├── app2/
│ │ │ │ │ ├── app22/
│ │ │ │ │ │ └── just_a_text_no_index.txt
│ │ │ │ │ ├── app2app3/
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── css/
│ │ │ │ │ └── main.css
│ │ │ │ ├── index.html
│ │ │ │ └── js/
│ │ │ │ └── jquery-2.1.1.js
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── upload-file/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── upload_form.html
│ │ ├── upload-files/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── templates/
│ │ │ └── upload_form.html
│ │ └── webdav/
│ │ ├── main.go
│ │ ├── newdir/
│ │ │ └── .gitkeep
│ │ └── test.txt
│ ├── graphql/
│ │ └── schema-first/
│ │ ├── README.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── gqlgen.yml
│ │ ├── graph/
│ │ │ ├── generated.go
│ │ │ ├── model/
│ │ │ │ └── models_gen.go
│ │ │ ├── resolver.go
│ │ │ ├── schema.graphqls
│ │ │ └── schema.resolvers.go
│ │ ├── server.go
│ │ └── tools.go
│ ├── http-client/
│ │ └── weatherapi/
│ │ ├── client/
│ │ │ ├── client.go
│ │ │ └── response.go
│ │ └── main.go
│ ├── http-server/
│ │ ├── README.md
│ │ ├── custom-httpserver/
│ │ │ ├── easy-way/
│ │ │ │ └── main.go
│ │ │ ├── multi/
│ │ │ │ └── main.go
│ │ │ └── std-way/
│ │ │ └── main.go
│ │ ├── custom-listener/
│ │ │ └── main.go
│ │ ├── graceful-shutdown/
│ │ │ ├── custom-notifier/
│ │ │ │ └── main.go
│ │ │ └── default-notifier/
│ │ │ └── main.go
│ │ ├── h2c/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── http3-quic/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── localhost.cert
│ │ │ ├── localhost.key
│ │ │ └── main.go
│ │ ├── iris-configurator-and-host-configurator/
│ │ │ └── main.go
│ │ ├── listen-addr/
│ │ │ ├── main.go
│ │ │ └── omit-server-errors/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── listen-addr-public/
│ │ │ └── main.go
│ │ ├── listen-letsencrypt/
│ │ │ └── main.go
│ │ ├── listen-tls/
│ │ │ ├── main.go
│ │ │ ├── mycert.crt
│ │ │ └── mykey.key
│ │ ├── listen-unix/
│ │ │ └── main.go
│ │ ├── notify-on-shutdown/
│ │ │ └── main.go
│ │ ├── socket-sharding/
│ │ │ └── main.go
│ │ └── timeout/
│ │ └── main.go
│ ├── i18n/
│ │ ├── basic/
│ │ │ ├── hosts
│ │ │ ├── locales/
│ │ │ │ ├── el-GR/
│ │ │ │ │ ├── locale_el-GR.ini
│ │ │ │ │ ├── locale_multi_first_el-GR.yml
│ │ │ │ │ └── locale_multi_second_el-GR.ini
│ │ │ │ ├── en-US/
│ │ │ │ │ ├── locale_en-US.ini
│ │ │ │ │ ├── locale_multi_first_en-US.yml
│ │ │ │ │ └── locale_multi_second_en-US.ini
│ │ │ │ └── zh-CN/
│ │ │ │ └── locale_zh-CN.ini
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── views/
│ │ │ └── index.html
│ │ ├── plurals/
│ │ │ ├── locales/
│ │ │ │ └── en-US/
│ │ │ │ ├── 1648.ini
│ │ │ │ └── welcome.yml
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── template/
│ │ │ ├── locales/
│ │ │ │ ├── el-GR/
│ │ │ │ │ ├── other.ini
│ │ │ │ │ └── user.ini
│ │ │ │ └── en-US/
│ │ │ │ ├── other.ini
│ │ │ │ └── user.ini
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── template-embedded/
│ │ ├── embedded/
│ │ │ └── locales/
│ │ │ ├── el-GR/
│ │ │ │ ├── other.ini
│ │ │ │ └── user.ini
│ │ │ └── en-US/
│ │ │ ├── other.ini
│ │ │ └── user.ini
│ │ ├── main.go
│ │ └── main_test.go
│ ├── kafka-api/
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── postman_collection.json
│ ├── logging/
│ │ ├── file-logger/
│ │ │ └── main.go
│ │ ├── json-logger/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── request-logger/
│ │ │ ├── accesslog/
│ │ │ │ ├── access.log.sample
│ │ │ │ ├── main.go
│ │ │ │ └── public/
│ │ │ │ └── index.html
│ │ │ ├── accesslog-broker/
│ │ │ │ └── main.go
│ │ │ ├── accesslog-csv/
│ │ │ │ ├── access_log.csv.sample
│ │ │ │ └── main.go
│ │ │ ├── accesslog-formatter/
│ │ │ │ └── main.go
│ │ │ ├── accesslog-proxy/
│ │ │ │ ├── main.go
│ │ │ │ └── target/
│ │ │ │ └── main.go
│ │ │ ├── accesslog-simple/
│ │ │ │ ├── access.log.sample
│ │ │ │ └── main.go
│ │ │ ├── accesslog-slack/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ └── slack_formatter.go
│ │ │ └── accesslog-template/
│ │ │ └── main.go
│ │ └── rollbar/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── monitor/
│ │ ├── monitor-middleware/
│ │ │ └── main.go
│ │ └── statsviz/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── mvc/
│ │ ├── authenticated-controller/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── basic/
│ │ │ ├── main.go
│ │ │ └── wildcard/
│ │ │ └── main.go
│ │ ├── error-handler/
│ │ │ └── main.go
│ │ ├── error-handler-custom-result/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ └── 500.html
│ │ ├── error-handler-hijack/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ └── 500.html
│ │ ├── error-handler-http/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ ├── 500.html
│ │ │ └── unexpected-error.html
│ │ ├── error-handler-preflight/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 404.html
│ │ │ └── 500.html
│ │ ├── grpc-compatible/
│ │ │ ├── README.md
│ │ │ ├── grpc-client/
│ │ │ │ └── main.go
│ │ │ ├── helloworld/
│ │ │ │ ├── README.md
│ │ │ │ ├── helloworld.pb.go
│ │ │ │ └── helloworld.proto
│ │ │ ├── http-client/
│ │ │ │ └── main.go
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ ├── server.crt
│ │ │ └── server.key
│ │ ├── grpc-compatible-bidirectional-stream/
│ │ │ ├── client/
│ │ │ │ └── main.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── helloworld/
│ │ │ │ ├── helloworld.pb.go
│ │ │ │ └── helloworld_grpc.pb.go
│ │ │ ├── helloworld.proto
│ │ │ ├── server/
│ │ │ │ └── main.go
│ │ │ ├── server.crt
│ │ │ └── server.key
│ │ ├── hello-world/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── login/
│ │ │ ├── datamodels/
│ │ │ │ └── user.go
│ │ │ ├── datasource/
│ │ │ │ └── users.go
│ │ │ ├── main.go
│ │ │ ├── repositories/
│ │ │ │ └── user_repository.go
│ │ │ ├── services/
│ │ │ │ └── user_service.go
│ │ │ └── web/
│ │ │ ├── controllers/
│ │ │ │ ├── user_controller.go
│ │ │ │ └── users_controller.go
│ │ │ ├── middleware/
│ │ │ │ └── basicauth.go
│ │ │ ├── public/
│ │ │ │ └── css/
│ │ │ │ └── site.css
│ │ │ ├── viewmodels/
│ │ │ │ └── README.md
│ │ │ └── views/
│ │ │ ├── shared/
│ │ │ │ ├── error.html
│ │ │ │ └── layout.html
│ │ │ └── user/
│ │ │ ├── login.html
│ │ │ ├── me.html
│ │ │ └── register.html
│ │ ├── login-mvc-single-responsibility/
│ │ │ ├── main.go
│ │ │ ├── public/
│ │ │ │ └── css/
│ │ │ │ └── site.css
│ │ │ ├── user/
│ │ │ │ ├── auth.go
│ │ │ │ ├── controller.go
│ │ │ │ ├── datasource.go
│ │ │ │ └── model.go
│ │ │ └── views/
│ │ │ ├── shared/
│ │ │ │ ├── error.html
│ │ │ │ └── layout.html
│ │ │ └── user/
│ │ │ ├── login.html
│ │ │ ├── me.html
│ │ │ ├── notfound.html
│ │ │ └── register.html
│ │ ├── middleware/
│ │ │ ├── main.go
│ │ │ ├── per-method/
│ │ │ │ └── main.go
│ │ │ └── without-ctx-next/
│ │ │ └── main.go
│ │ ├── overview/
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── controller/
│ │ │ │ └── greet_controller.go
│ │ │ ├── database/
│ │ │ │ ├── database.go
│ │ │ │ ├── mysql.go
│ │ │ │ └── sqlite.go
│ │ │ ├── docker-compose.yml
│ │ │ ├── environment/
│ │ │ │ └── environment.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ ├── model/
│ │ │ │ ├── request.go
│ │ │ │ └── response.go
│ │ │ └── service/
│ │ │ └── greet_service.go
│ │ ├── regexp/
│ │ │ └── main.go
│ │ ├── repository/
│ │ │ ├── datamodels/
│ │ │ │ ├── README.md
│ │ │ │ └── movie.go
│ │ │ ├── datasource/
│ │ │ │ ├── README.md
│ │ │ │ └── movies.go
│ │ │ ├── main.go
│ │ │ ├── models/
│ │ │ │ └── README.md
│ │ │ ├── repositories/
│ │ │ │ ├── README.md
│ │ │ │ └── movie_repository.go
│ │ │ ├── services/
│ │ │ │ ├── README.md
│ │ │ │ └── movie_service.go
│ │ │ └── web/
│ │ │ ├── controllers/
│ │ │ │ ├── hello_controller.go
│ │ │ │ └── movie_controller.go
│ │ │ ├── middleware/
│ │ │ │ └── basicauth.go
│ │ │ ├── viewmodels/
│ │ │ │ └── README.md
│ │ │ └── views/
│ │ │ └── hello/
│ │ │ ├── index.html
│ │ │ └── name.html
│ │ ├── request-default-values/
│ │ │ └── main.go
│ │ ├── session-controller/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── singleton/
│ │ │ └── main.go
│ │ ├── versioned-controller/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── vuejs-todo-mvc/
│ │ │ ├── README.md
│ │ │ └── src/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── todo/
│ │ │ │ ├── item.go
│ │ │ │ └── service.go
│ │ │ └── web/
│ │ │ ├── controllers/
│ │ │ │ └── todo_controller.go
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ ├── css/
│ │ │ │ └── index
│ │ │ ├── index.html
│ │ │ └── js/
│ │ │ ├── app.js
│ │ │ └── lib/
│ │ │ └── .gitkeep
│ │ ├── websocket/
│ │ │ ├── browser/
│ │ │ │ └── index.html
│ │ │ └── main.go
│ │ └── websocket-auth/
│ │ ├── auth.yml
│ │ ├── browser/
│ │ │ └── index.html
│ │ ├── main.go
│ │ ├── user.go
│ │ ├── user_provider.go
│ │ └── views/
│ │ ├── layouts/
│ │ │ └── main.html
│ │ ├── partials/
│ │ │ └── footer.html
│ │ └── signin.html
│ ├── pprof/
│ │ └── main.go
│ ├── project/
│ │ ├── README.md
│ │ ├── api/
│ │ │ ├── configuration.go
│ │ │ ├── router.go
│ │ │ ├── server.go
│ │ │ └── users/
│ │ │ └── api.go
│ │ ├── cmd/
│ │ │ ├── cmd.go
│ │ │ └── help.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── pkg/
│ │ │ ├── database/
│ │ │ │ └── database.go
│ │ │ └── http/
│ │ │ └── handlers/
│ │ │ └── cors.go
│ │ ├── server.yml
│ │ └── user/
│ │ ├── repository.go
│ │ └── user.go
│ ├── recover/
│ │ ├── main.go
│ │ └── panic-and-custom-error-handler-with-compression/
│ │ └── main.go
│ ├── request-body/
│ │ ├── form-query-headers-params-decoder/
│ │ │ └── main.go
│ │ ├── read-body/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-custom-per-type/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-custom-via-unmarshaler/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-form/
│ │ │ ├── checkboxes/
│ │ │ │ ├── main.go
│ │ │ │ └── templates/
│ │ │ │ └── form.html
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── form.html
│ │ ├── read-headers/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-json/
│ │ │ └── main.go
│ │ ├── read-json-stream/
│ │ │ └── main.go
│ │ ├── read-json-struct-validation/
│ │ │ └── main.go
│ │ ├── read-many/
│ │ │ └── main.go
│ │ ├── read-msgpack/
│ │ │ └── main.go
│ │ ├── read-params/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-query/
│ │ │ └── main.go
│ │ ├── read-url/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── read-xml/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── read-yaml/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── request-ratelimit/
│ │ ├── rate-middleware/
│ │ │ └── main.go
│ │ └── ulule-limiter/
│ │ └── main.go
│ ├── request-referrer/
│ │ └── main.go
│ ├── response-writer/
│ │ ├── cache/
│ │ │ ├── client-side/
│ │ │ │ └── main.go
│ │ │ └── simple/
│ │ │ └── main.go
│ │ ├── content-negotiation/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── http2push/
│ │ │ ├── main.go
│ │ │ ├── mycert.crt
│ │ │ ├── mykey.key
│ │ │ └── public/
│ │ │ └── main.js
│ │ ├── json-third-party/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── protobuf/
│ │ │ ├── README.md
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── protos/
│ │ │ ├── hello.pb.go
│ │ │ └── hello.proto
│ │ ├── sse/
│ │ │ ├── main.go
│ │ │ └── optional.sse.mini.js.html
│ │ ├── sse-third-party/
│ │ │ └── main.go
│ │ ├── sse-third-party-2/
│ │ │ ├── index.html
│ │ │ └── main.go
│ │ ├── stream-writer/
│ │ │ └── main.go
│ │ └── write-rest/
│ │ └── main.go
│ ├── routing/
│ │ ├── basic/
│ │ │ ├── .dockerignore
│ │ │ ├── Dockerfile
│ │ │ ├── README.md
│ │ │ ├── docker-compose.yml
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── conditional-chain/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── custom-context/
│ │ │ └── main.go
│ │ ├── custom-router/
│ │ │ └── main.go
│ │ ├── custom-wrapper/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── public/
│ │ │ ├── app.js
│ │ │ ├── css/
│ │ │ │ └── main.css
│ │ │ └── index.html
│ │ ├── dynamic-path/
│ │ │ ├── at-username/
│ │ │ │ └── main.go
│ │ │ ├── main.go
│ │ │ ├── root-wildcard/
│ │ │ │ └── main.go
│ │ │ └── same-pattern-different-func/
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── use-global/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── hello-world/
│ │ │ └── main.go
│ │ ├── http-errors/
│ │ │ ├── main.go
│ │ │ └── reset-body/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── http-wire-errors/
│ │ │ ├── main.go
│ │ │ └── service/
│ │ │ └── main.go
│ │ ├── intelligence/
│ │ │ ├── main.go
│ │ │ └── manual/
│ │ │ └── main.go
│ │ ├── macros/
│ │ │ └── main.go
│ │ ├── main.go
│ │ ├── main_test.go
│ │ ├── overview/
│ │ │ ├── main.go
│ │ │ └── public/
│ │ │ └── assets/
│ │ │ └── css/
│ │ │ └── main.css
│ │ ├── overview-2/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── user/
│ │ │ ├── create_verification.html
│ │ │ └── profile.html
│ │ ├── party-controller/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── pkg/
│ │ │ └── weatherapi/
│ │ │ ├── client.go
│ │ │ └── response.go
│ │ ├── remove-handler/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── remove-route/
│ │ │ └── main.go
│ │ ├── reverse/
│ │ │ └── main.go
│ │ ├── rewrite/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── redirects.yml
│ │ ├── route-handlers-execution-rules/
│ │ │ └── main.go
│ │ ├── route-register-rule/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── route-state/
│ │ │ └── main.go
│ │ ├── sitemap/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ ├── subdomains/
│ │ │ ├── http-errors-view/
│ │ │ │ ├── main.go
│ │ │ │ ├── main_test.go
│ │ │ │ └── views/
│ │ │ │ ├── error.html
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── layout.html
│ │ │ │ │ └── test.layout.html
│ │ │ │ └── partials/
│ │ │ │ ├── 404.html
│ │ │ │ └── 500.html
│ │ │ ├── multi/
│ │ │ │ ├── hosts
│ │ │ │ └── main.go
│ │ │ ├── redirect/
│ │ │ │ ├── hosts
│ │ │ │ ├── main.go
│ │ │ │ └── multi-instances/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── main.go
│ │ │ │ ├── other/
│ │ │ │ │ └── server.go
│ │ │ │ └── root/
│ │ │ │ └── server.go
│ │ │ ├── single/
│ │ │ │ ├── hosts
│ │ │ │ └── main.go
│ │ │ ├── wildcard/
│ │ │ │ ├── hosts
│ │ │ │ └── main.go
│ │ │ └── www/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ └── www-method/
│ │ │ └── main.go
│ │ ├── versioning/
│ │ │ ├── main.go
│ │ │ ├── v1/
│ │ │ │ └── index.html
│ │ │ ├── v2/
│ │ │ │ └── index.html
│ │ │ └── v3/
│ │ │ └── index.html
│ │ └── writing-a-middleware/
│ │ ├── globally/
│ │ │ └── main.go
│ │ ├── per-route/
│ │ │ └── main.go
│ │ ├── share-funcs/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── share-services/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── sessions/
│ │ ├── basic/
│ │ │ └── main.go
│ │ ├── database/
│ │ │ ├── badger/
│ │ │ │ └── main.go
│ │ │ ├── boltdb/
│ │ │ │ └── main.go
│ │ │ └── redis/
│ │ │ ├── Dockerfile
│ │ │ ├── docker-compose.yml
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── flash-messages/
│ │ │ └── main.go
│ │ ├── overview/
│ │ │ ├── example/
│ │ │ │ └── example.go
│ │ │ └── main.go
│ │ ├── securecookie/
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── viewdata/
│ │ ├── main.go
│ │ └── views/
│ │ └── index.html
│ ├── testing/
│ │ ├── ginkgotest/
│ │ │ ├── ginkgotest_suite_test.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── main.go
│ │ │ └── main_test.go
│ │ └── httptest/
│ │ ├── main.go
│ │ └── main_test.go
│ ├── url-shortener/
│ │ ├── README.md
│ │ ├── factory.go
│ │ ├── main.go
│ │ ├── main_test.go
│ │ ├── resources/
│ │ │ └── css/
│ │ │ └── style.css
│ │ ├── store.go
│ │ └── templates/
│ │ └── index.html
│ ├── view/
│ │ ├── context-view-data/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── index.html
│ │ │ └── layouts/
│ │ │ └── layout.html
│ │ ├── context-view-engine/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── admin/
│ │ │ │ ├── index.html
│ │ │ │ └── layouts/
│ │ │ │ └── main.html
│ │ │ ├── on-fly/
│ │ │ │ └── index.html
│ │ │ └── public/
│ │ │ ├── 500.html
│ │ │ ├── index.html
│ │ │ ├── layouts/
│ │ │ │ ├── error.html
│ │ │ │ └── main.html
│ │ │ └── partials/
│ │ │ └── footer.html
│ │ ├── embedding-templates-into-app/
│ │ │ ├── embedded/
│ │ │ │ └── templates/
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── layout.html
│ │ │ │ │ └── mylayout.html
│ │ │ │ ├── page1.html
│ │ │ │ └── partials/
│ │ │ │ └── page1_partial1.html
│ │ │ └── main.go
│ │ ├── embedding-templates-into-app-bindata/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── layouts/
│ │ │ │ ├── layout.html
│ │ │ │ └── mylayout.html
│ │ │ ├── page1.html
│ │ │ └── partials/
│ │ │ └── page1_partial1.html
│ │ ├── fallback/
│ │ │ ├── main.go
│ │ │ └── view/
│ │ │ └── fallback.html
│ │ ├── herotemplate/
│ │ │ ├── README.md
│ │ │ ├── app.go
│ │ │ └── template/
│ │ │ ├── index.html
│ │ │ ├── index.html.go
│ │ │ ├── user.html
│ │ │ ├── user.html.go
│ │ │ ├── userlist.html
│ │ │ ├── userlist.html.go
│ │ │ ├── userlistwriter.html
│ │ │ └── userlistwriter.html.go
│ │ ├── layout/
│ │ │ ├── ace/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.ace
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.ace
│ │ │ │ └── partials/
│ │ │ │ └── footer.ace
│ │ │ ├── blocks/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── django/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── handlebars/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── html/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.html
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.html
│ │ │ │ └── partials/
│ │ │ │ └── footer.html
│ │ │ ├── jet/
│ │ │ │ ├── main.go
│ │ │ │ └── views/
│ │ │ │ ├── index.jet
│ │ │ │ ├── layouts/
│ │ │ │ │ └── main.jet
│ │ │ │ └── partials/
│ │ │ │ └── footer.jet
│ │ │ └── pug/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── index.pug
│ │ │ ├── layouts/
│ │ │ │ └── main.pug
│ │ │ └── partials/
│ │ │ └── footer.pug
│ │ ├── overview/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── example.html
│ │ │ ├── functions.html
│ │ │ └── hi.html
│ │ ├── parse-template/
│ │ │ ├── django/
│ │ │ │ └── main.go
│ │ │ ├── handlebars/
│ │ │ │ └── main.go
│ │ │ ├── jet/
│ │ │ │ └── main.go
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── layouts/
│ │ │ └── main.html
│ │ ├── quicktemplate/
│ │ │ ├── README.md
│ │ │ ├── controllers/
│ │ │ │ ├── execute_template.go
│ │ │ │ ├── hello.go
│ │ │ │ └── index.go
│ │ │ ├── main.go
│ │ │ ├── main_test.go
│ │ │ ├── models/
│ │ │ │ └── .gitkeep
│ │ │ └── templates/
│ │ │ ├── base.qtpl
│ │ │ ├── base.qtpl.go
│ │ │ ├── hello.qtpl
│ │ │ ├── hello.qtpl.go
│ │ │ ├── index.qtpl
│ │ │ └── index.qtpl.go
│ │ ├── templ/
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── hello.templ
│ │ │ ├── hello_templ.go
│ │ │ └── main.go
│ │ ├── template_ace_0/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── index.ace
│ │ │ ├── layouts/
│ │ │ │ └── main.ace
│ │ │ └── partials/
│ │ │ ├── footer.ace
│ │ │ └── header.ace
│ │ ├── template_blocks_0/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── 500.html
│ │ │ ├── index.html
│ │ │ ├── layouts/
│ │ │ │ ├── error.html
│ │ │ │ └── main.html
│ │ │ └── partials/
│ │ │ └── footer.html
│ │ ├── template_blocks_1_embedded/
│ │ │ ├── bindata.go
│ │ │ └── main.go
│ │ ├── template_blocks_2/
│ │ │ ├── main.go
│ │ │ └── src/
│ │ │ └── public/
│ │ │ └── html/
│ │ │ ├── files/
│ │ │ │ └── list.html
│ │ │ ├── layouts/
│ │ │ │ ├── main.html
│ │ │ │ └── secondary.html
│ │ │ └── menu/
│ │ │ └── menu.html
│ │ ├── template_django_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── hi.html
│ │ ├── template_django_1/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── page.html
│ │ ├── template_handlebars_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── example.html
│ │ ├── template_html_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── hi.html
│ │ ├── template_html_1/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── layout.html
│ │ │ └── mypage.html
│ │ ├── template_html_2/
│ │ │ ├── README.md
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── layouts/
│ │ │ │ ├── layout.html
│ │ │ │ └── mylayout.html
│ │ │ ├── page1.html
│ │ │ └── partials/
│ │ │ └── page1_partial1.html
│ │ ├── template_html_3/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── page.html
│ │ ├── template_html_4/
│ │ │ ├── hosts
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── page.html
│ │ ├── template_html_5/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── about.html
│ │ │ ├── home.html
│ │ │ ├── layout.html
│ │ │ └── user/
│ │ │ └── index.html
│ │ ├── template_jet_0/
│ │ │ ├── README.md
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── layouts/
│ │ │ │ └── application.jet
│ │ │ └── todos/
│ │ │ ├── index.jet
│ │ │ └── show.jet
│ │ ├── template_jet_1_embedded/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ ├── includes/
│ │ │ │ ├── _partial.jet
│ │ │ │ └── blocks.jet
│ │ │ ├── index.jet
│ │ │ └── layouts/
│ │ │ └── application.jet
│ │ ├── template_jet_2/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── page.jet
│ │ ├── template_jet_3/
│ │ │ ├── main.go
│ │ │ └── views/
│ │ │ └── index.jet
│ │ ├── template_pug_0/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ └── index.pug
│ │ ├── template_pug_1/
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── footer.pug
│ │ │ ├── header.pug
│ │ │ └── index.pug
│ │ ├── template_pug_2_embedded/
│ │ │ ├── bindata.go
│ │ │ ├── main.go
│ │ │ └── templates/
│ │ │ ├── index.pug
│ │ │ └── layout.pug
│ │ └── write-to/
│ │ ├── main.go
│ │ └── views/
│ │ ├── email/
│ │ │ └── simple.html
│ │ └── shared/
│ │ └── email.html
│ ├── webassembly/
│ │ ├── client/
│ │ │ ├── go-wasm-runtime.js
│ │ │ ├── hello.html
│ │ │ ├── hello_go116.go
│ │ │ └── main.js
│ │ └── main.go
│ └── websocket/
│ ├── README.md
│ ├── basic/
│ │ ├── README.md
│ │ ├── browser/
│ │ │ └── index.html
│ │ ├── browserify/
│ │ │ ├── app.js
│ │ │ ├── bundle.js
│ │ │ ├── client.html
│ │ │ └── package.json
│ │ ├── go-client/
│ │ │ └── client.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── nodejs-client/
│ │ │ ├── client.js
│ │ │ └── package.json
│ │ └── server.go
│ ├── gorilla-filewatch/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── testfile.txt
│ │ └── views/
│ │ └── home.html
│ ├── native-messages/
│ │ ├── main.go
│ │ ├── static/
│ │ │ └── js/
│ │ │ └── chat.js
│ │ └── templates/
│ │ └── client.html
│ ├── online-visitors/
│ │ ├── main.go
│ │ ├── static/
│ │ │ └── assets/
│ │ │ └── js/
│ │ │ └── visitors.js
│ │ └── templates/
│ │ ├── index.html
│ │ └── other.html
│ ├── secure/
│ │ └── README.md
│ └── socketio/
│ ├── asset/
│ │ └── index.html
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── _proposals/
│ ├── route_builder.md
│ └── xerrors_party.md
├── aliases.go
├── apps/
│ ├── README.md
│ ├── apps.go
│ ├── switch.go
│ ├── switch_hosts.go
│ ├── switch_hosts_test.go
│ ├── switch_options.go
│ ├── switch_options_test.go
│ ├── switch_scheme.go
│ └── switch_test.go
├── auth/
│ ├── auth.go
│ ├── configuration.go
│ ├── provider.go
│ └── user.go
├── cache/
│ ├── browser.go
│ ├── browser_test.go
│ ├── cache.go
│ ├── cache_test.go
│ ├── cfg/
│ │ └── cfg.go
│ ├── client/
│ │ ├── client.go
│ │ ├── handler.go
│ │ ├── rule/
│ │ │ ├── chained.go
│ │ │ ├── conditional.go
│ │ │ ├── header.go
│ │ │ ├── not_satisfied.go
│ │ │ ├── rule.go
│ │ │ ├── satisfied.go
│ │ │ └── validator.go
│ │ └── ruleset.go
│ ├── entry/
│ │ ├── entry.go
│ │ ├── pool.go
│ │ ├── response.go
│ │ └── store.go
│ ├── ruleset/
│ │ └── ruleset.go
│ └── uri/
│ └── uribuilder.go
├── cli.go
├── configuration.go
├── configuration_test.go
├── context/
│ ├── accept_header.go
│ ├── application.go
│ ├── compress.go
│ ├── configuration.go
│ ├── context.go
│ ├── context_func.go
│ ├── context_go118.go
│ ├── context_user.go
│ ├── counter.go
│ ├── fs.go
│ ├── handler.go
│ ├── i18n.go
│ ├── pool.go
│ ├── problem.go
│ ├── request_params.go
│ ├── response_recorder.go
│ ├── response_writer.go
│ ├── route.go
│ ├── status.go
│ ├── strconv.go
│ └── view.go
├── context_wrapper.go
├── core/
│ ├── errgroup/
│ │ ├── errgroup.go
│ │ └── errgroup_test.go
│ ├── handlerconv/
│ │ ├── from_std.go
│ │ └── from_std_test.go
│ ├── host/
│ │ ├── interrupt.go
│ │ ├── proxy.go
│ │ ├── proxy_test.go
│ │ ├── supervisor.go
│ │ ├── supervisor_task_example_test.go
│ │ ├── supervisor_test.go
│ │ ├── task.go
│ │ └── waiter.go
│ ├── memstore/
│ │ ├── gob.go
│ │ ├── lifetime.go
│ │ ├── memstore.go
│ │ └── memstore_test.go
│ ├── netutil/
│ │ ├── addr.go
│ │ ├── addr_test.go
│ │ ├── client.go
│ │ ├── ip.go
│ │ ├── ip_test.go
│ │ ├── server.go
│ │ ├── tcp.go
│ │ ├── tcp_soreuse_control_unix.go
│ │ ├── tcp_soreuse_control_wasm.go
│ │ └── tcp_soreuse_control_windows.go
│ └── router/
│ ├── TestUseRouterParentDisallow_fuzz_test.go
│ ├── api_builder.go
│ ├── api_builder_benchmark_test.go
│ ├── api_container.go
│ ├── fs.go
│ ├── handler.go
│ ├── handler_debug.go
│ ├── handler_execution_rules.go
│ ├── handler_execution_rules_test.go
│ ├── mime.go
│ ├── party.go
│ ├── path.go
│ ├── path_test.go
│ ├── route.go
│ ├── route_register_rule_test.go
│ ├── route_test.go
│ ├── router.go
│ ├── router_handlers_order_test.go
│ ├── router_subdomain_redirect.go
│ ├── router_test.go
│ ├── router_wildcard_root_test.go
│ ├── router_wrapper.go
│ ├── router_wrapper_test.go
│ ├── status_test.go
│ └── trie.go
├── doc.go
├── go.mod
├── go.sum
├── hero/
│ ├── binding.go
│ ├── binding_test.go
│ ├── container.go
│ ├── container_test.go
│ ├── dependency.go
│ ├── dependency_source.go
│ ├── dependency_test.go
│ ├── func_result.go
│ ├── func_result_test.go
│ ├── handler.go
│ ├── handler_test.go
│ ├── param_test.go
│ ├── reflect.go
│ ├── reflect_test.go
│ ├── struct.go
│ └── struct_test.go
├── httptest/
│ ├── aliases.go
│ ├── httptest.go
│ ├── netutils.go
│ ├── server.go
│ └── status.go
├── i18n/
│ ├── i18n.go
│ ├── internal/
│ │ ├── aliases.go
│ │ ├── catalog.go
│ │ ├── locale.go
│ │ ├── message.go
│ │ ├── plural.go
│ │ ├── template.go
│ │ └── var.go
│ └── loader.go
├── iris.go
├── iris_guide.go
├── macro/
│ ├── handler/
│ │ ├── handler.go
│ │ └── handler_test.go
│ ├── interpreter/
│ │ ├── ast/
│ │ │ └── ast.go
│ │ ├── lexer/
│ │ │ ├── lexer.go
│ │ │ └── lexer_test.go
│ │ ├── parser/
│ │ │ ├── parser.go
│ │ │ └── parser_test.go
│ │ └── token/
│ │ └── token.go
│ ├── macro.go
│ ├── macro_test.go
│ ├── macros.go
│ └── template.go
├── middleware/
│ ├── README.md
│ ├── accesslog/
│ │ ├── accesslog.go
│ │ ├── accesslog_test.go
│ │ ├── broker.go
│ │ ├── csv.go
│ │ ├── csv_test.go
│ │ ├── json.go
│ │ ├── json_easy.go
│ │ ├── log.go
│ │ └── template.go
│ ├── basicauth/
│ │ ├── basicauth.go
│ │ ├── basicauth_test.go
│ │ ├── error.go
│ │ ├── header.go
│ │ ├── header_test.go
│ │ ├── user.go
│ │ └── user_test.go
│ ├── cors/
│ │ └── cors.go
│ ├── grpc/
│ │ └── grpc.go
│ ├── hcaptcha/
│ │ ├── ARTICLE.md
│ │ └── hcaptcha.go
│ ├── jwt/
│ │ ├── ARTICLE.md
│ │ ├── aliases.go
│ │ ├── blocklist/
│ │ │ └── redis/
│ │ │ └── blocklist.go
│ │ ├── blocklist.go
│ │ ├── extractor.go
│ │ ├── jwt.go
│ │ ├── jwt_test.go
│ │ ├── signer.go
│ │ └── verifier.go
│ ├── logger/
│ │ ├── config.go
│ │ └── logger.go
│ ├── methodoverride/
│ │ ├── methodoverride.go
│ │ └── methodoverride_test.go
│ ├── modrevision/
│ │ └── modrevision.go
│ ├── monitor/
│ │ ├── expvar_uint64.go
│ │ ├── monitor.go
│ │ ├── stats.go
│ │ └── view.go
│ ├── pprof/
│ │ └── pprof.go
│ ├── rate/
│ │ └── rate.go
│ ├── recaptcha/
│ │ └── recaptcha.go
│ ├── recover/
│ │ └── recover.go
│ ├── requestid/
│ │ ├── requestid.go
│ │ └── requestid_test.go
│ └── rewrite/
│ ├── rewrite.go
│ └── rewrite_test.go
├── mvc/
│ ├── aliases.go
│ ├── controller.go
│ ├── controller_handle_test.go
│ ├── controller_method_parser.go
│ ├── controller_method_result_test.go
│ ├── controller_overlap_test.go
│ ├── controller_test.go
│ ├── grpc.go
│ ├── mvc.go
│ ├── reflect.go
│ └── versioning.go
├── sessions/
│ ├── config.go
│ ├── database.go
│ ├── provider.go
│ ├── session.go
│ ├── sessiondb/
│ │ ├── badger/
│ │ │ └── database.go
│ │ ├── boltdb/
│ │ │ └── database.go
│ │ └── redis/
│ │ ├── database.go
│ │ ├── driver.go
│ │ └── driver_goredis.go
│ ├── sessions.go
│ ├── sessions_test.go
│ └── transcoding.go
├── versioning/
│ ├── deprecation.go
│ ├── deprecation_test.go
│ ├── group.go
│ ├── group_test.go
│ ├── version.go
│ └── version_test.go
├── view/
│ ├── README.md
│ ├── ace.go
│ ├── blocks.go
│ ├── django.go
│ ├── fs.go
│ ├── handlebars.go
│ ├── html.go
│ ├── jet.go
│ ├── pug.go
│ └── view.go
├── websocket/
│ ├── aliases.go
│ └── websocket.go
└── x/
├── client/
│ ├── client.go
│ ├── client_test.go
│ ├── error.go
│ ├── handler_transport.go
│ ├── option.go
│ └── request_handler.go
├── errors/
│ ├── aliases.go
│ ├── context_error_handler.go
│ ├── errors.go
│ ├── handlers.go
│ ├── path_parameter_type_error_handler.go
│ ├── validation/
│ │ ├── error.go
│ │ ├── number.go
│ │ ├── slice.go
│ │ └── string.go
│ └── validation_error.go
├── jsonx/
│ ├── day_time.go
│ ├── day_time_test.go
│ ├── duration.go
│ ├── exampler.go
│ ├── iso8601.go
│ ├── iso8601_test.go
│ ├── jsonx.go
│ ├── kitchen_time.go
│ ├── kitchen_time_test.go
│ ├── season.go
│ ├── simple_date.go
│ ├── simple_date_test.go
│ └── time_notation.go
├── mathx/
│ └── round.go
├── pagination/
│ └── pagination.go
├── reflex/
│ ├── error.go
│ ├── func.go
│ ├── reflex.go
│ ├── struct.go
│ ├── types.go
│ └── zero.go
├── sqlx/
│ ├── sqlx.go
│ ├── sqlx_test.go
│ ├── struct_row.go
│ └── util.go
└── timex/
├── weekday.go
└── weekday_test.go
Showing preview only (528K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6051 symbols across 751 files)
FILE: _benchmarks/view/ace/main.go
function main (line 9) | func main() {
function index (line 19) | func index(ctx iris.Context) {
FILE: _benchmarks/view/blocks/main.go
function main (line 9) | func main() {
function index (line 21) | func index(ctx iris.Context) {
FILE: _benchmarks/view/django/main.go
function main (line 9) | func main() {
function index (line 18) | func index(ctx iris.Context) {
FILE: _benchmarks/view/handlebars/main.go
function main (line 9) | func main() {
function index (line 18) | func index(ctx iris.Context) {
FILE: _benchmarks/view/html/main.go
function main (line 9) | func main() {
function index (line 19) | func index(ctx iris.Context) {
FILE: _benchmarks/view/jet/main.go
function main (line 9) | func main() {
function index (line 18) | func index(ctx iris.Context) {
FILE: _benchmarks/view/pug/main.go
function main (line 9) | func main() {
function index (line 19) | func index(ctx iris.Context) {
FILE: _examples/auth/auth/main.go
function allowRole (line 13) | func allowRole(role AccessRole) auth.VerifyUserFunc[User] {
constant configFilename (line 23) | configFilename = "./auth.yml"
function main (line 25) | func main() {
function renderSigninForm (line 120) | func renderSigninForm(ctx iris.Context) {
function renderMemberPage (line 127) | func renderMemberPage(s *auth.Auth[User]) iris.Handler {
function renderOwnerPage (line 134) | func renderOwnerPage(s *auth.Auth[User]) iris.Handler {
FILE: _examples/auth/auth/user.go
type AccessRole (line 6) | type AccessRole
method Is (line 8) | func (r AccessRole) Is(v AccessRole) bool {
method Allow (line 12) | func (r AccessRole) Allow(v AccessRole) bool {
constant InvalidAccessRole (line 17) | InvalidAccessRole AccessRole = 1 << iota
constant Read (line 18) | Read
constant Write (line 19) | Write
constant Delete (line 20) | Delete
constant Owner (line 22) | Owner = Read | Write | Delete
constant Member (line 23) | Member = Read | Write
type User (line 26) | type User struct
method GetID (line 32) | func (u User) GetID() string {
FILE: _examples/auth/auth/user_provider.go
type Provider (line 15) | type Provider struct
method Signin (line 42) | func (p *Provider) Signin(ctx context.Context, username, password stri...
method ValidateToken (line 53) | func (p *Provider) ValidateToken(ctx context.Context, standardClaims a...
method InvalidateToken (line 85) | func (p *Provider) InvalidateToken(ctx context.Context, standardClaims...
method InvalidateTokens (line 94) | func (p *Provider) InvalidateTokens(ctx context.Context, u User) error...
function NewProvider (line 23) | func NewProvider() *Provider {
FILE: _examples/auth/basicauth/basic/main.go
function newApp (line 10) | func newApp() *iris.Application {
function main (line 76) | func main() {
function handler (line 82) | func handler(ctx iris.Context) {
function logout (line 91) | func logout(ctx iris.Context) {
FILE: _examples/auth/basicauth/basic/main_test.go
function TestBasicAuth (line 9) | func TestBasicAuth(t *testing.T) {
FILE: _examples/auth/basicauth/database/main.go
type User (line 18) | type User struct
method GetUsername (line 26) | func (u User) GetUsername() string {
method GetPassword (line 31) | func (u User) GetPassword() string {
function main (line 35) | func main() {
function index (line 67) | func index(ctx iris.Context) {
function getenv (line 73) | func getenv(key string, def string) string {
type database (line 82) | type database struct
method getUserByUsernameAndPassword (line 100) | func (db *database) getUserByUsernameAndPassword(ctx context.Context, ...
function connect (line 86) | func connect(dsn string) (*database, error) {
FILE: _examples/auth/basicauth/database/migration/db.sql
type users (line 9) | CREATE TABLE users (
FILE: _examples/auth/basicauth/users_file_bcrypt/main.go
function main (line 8) | func main() {
function index (line 27) | func index(ctx iris.Context) {
FILE: _examples/auth/basicauth/users_list/main.go
type User (line 13) | type User struct
function main (line 26) | func main() {
function index (line 55) | func index(ctx iris.Context) {
FILE: _examples/auth/cors/main.go
function main (line 22) | func main() {
type item (line 53) | type item struct
function listData (line 57) | func listData(ctx iris.Context) {
FILE: _examples/auth/cors/public/main.js
function doRequest (line 2) | async function doRequest(method = 'GET', url = '', data = {}) {
function fetchData (line 29) | function fetchData() {
FILE: _examples/auth/goth/main.go
function init (line 75) | func init() {
function BeginAuthHandler (line 125) | func BeginAuthHandler(ctx iris.Context) {
function GetAuthURL (line 145) | func GetAuthURL(ctx iris.Context) (string, error) {
function Logout (line 236) | func Logout(ctx iris.Context) error {
function main (line 248) | func main() {
type ProviderIndex (line 419) | type ProviderIndex struct
FILE: _examples/auth/hcaptcha/main.go
function main (line 18) | func main() {
function register (line 33) | func register(ctx iris.Context) {
function registerForm (line 44) | func registerForm(ctx iris.Context) {
FILE: _examples/auth/jwt/basic/main.go
function main (line 19) | func main() {
type fooClaims (line 28) | type fooClaims struct
function generateToken (line 32) | func generateToken(ctx iris.Context) {
function protected (line 49) | func protected(ctx iris.Context) {
FILE: _examples/auth/jwt/blocklist/main.go
type userClaims (line 21) | type userClaims struct
function main (line 25) | func main() {
function authenticate (line 64) | func authenticate(ctx iris.Context) {
function protected (line 88) | func protected(ctx iris.Context) {
function logout (line 97) | func logout(ctx iris.Context) {
FILE: _examples/auth/jwt/middleware/main.go
type fooClaims (line 15) | type fooClaims struct
function main (line 24) | func main() {
function generateToken (line 57) | func generateToken(signer *jwt.Signer) iris.Handler {
function protected (line 71) | func protected(ctx iris.Context) {
function logout (line 84) | func logout(ctx iris.Context) {
FILE: _examples/auth/jwt/refresh-token/main.go
constant accessTokenMaxAge (line 12) | accessTokenMaxAge = 10 * time.Minute
constant refreshTokenMaxAge (line 13) | refreshTokenMaxAge = time.Hour
type UserClaims (line 24) | type UserClaims struct
method GetID (line 37) | func (u *UserClaims) GetID() string {
method GetUsername (line 42) | func (u *UserClaims) GetUsername() string {
method Validate (line 49) | func (u *UserClaims) Validate() error {
function main (line 60) | func main() {
function generateTokenPair (line 98) | func generateTokenPair(ctx iris.Context) {
function refreshToken (line 133) | func refreshToken(ctx iris.Context) {
function handleUnauthorized (line 177) | func handleUnauthorized(ctx iris.Context) {
FILE: _examples/auth/jwt/tutorial/api/auth.go
constant defaultSecretKey (line 16) | defaultSecretKey = "sercrethatmaycontainch@r$32chars"
function getSecretKey (line 18) | func getSecretKey() string {
type UserClaims (line 28) | type UserClaims struct
method Validate (line 35) | func (u *UserClaims) Validate() error {
function Verify (line 44) | func Verify() iris.Handler {
function AllowAdmin (line 56) | func AllowAdmin(ctx iris.Context) {
function SignIn (line 66) | func SignIn(repo repository.UserRepository) iris.Handler {
function SignOut (line 116) | func SignOut(ctx iris.Context) {
function GetClaims (line 121) | func GetClaims(ctx iris.Context) *UserClaims {
function GetUserID (line 127) | func GetUserID(ctx iris.Context) string {
function IsAdmin (line 132) | func IsAdmin(ctx iris.Context) bool {
FILE: _examples/auth/jwt/tutorial/api/router.go
function NewRouter (line 11) | func NewRouter(userRepo repository.UserRepository, todoRepo repository.T...
FILE: _examples/auth/jwt/tutorial/api/todo.go
type TodoRequest (line 11) | type TodoRequest struct
function CreateTodo (line 17) | func CreateTodo(repo repository.TodoRepository) iris.Handler {
function GetTodo (line 40) | func GetTodo(repo repository.TodoRepository) iris.Handler {
function ListTodos (line 68) | func ListTodos(repo repository.TodoRepository) iris.Handler {
function ListAllTodos (line 89) | func ListAllTodos(repo repository.TodoRepository) iris.Handler {
FILE: _examples/auth/jwt/tutorial/domain/model/role.go
type Role (line 4) | type Role
constant Admin (line 8) | Admin Role = "admin"
FILE: _examples/auth/jwt/tutorial/domain/model/todo.go
type Todo (line 4) | type Todo struct
FILE: _examples/auth/jwt/tutorial/domain/model/user.go
type User (line 4) | type User struct
FILE: _examples/auth/jwt/tutorial/domain/repository/samples.go
function GenerateSamples (line 10) | func GenerateSamples(userRepo UserRepository, todoRepo TodoRepository) e...
FILE: _examples/auth/jwt/tutorial/domain/repository/todo_repository.go
type TodoRepository (line 17) | type TodoRepository interface
type memoryTodoRepository (line 28) | type memoryTodoRepository struct
method Create (line 39) | func (r *memoryTodoRepository) Create(userID, title, body string) (mod...
method GetByID (line 60) | func (r *memoryTodoRepository) GetByID(id string) (model.Todo, error) {
method GetAll (line 73) | func (r *memoryTodoRepository) GetAll() ([]model.Todo, error) {
method GetAllByUser (line 81) | func (r *memoryTodoRepository) GetAllByUser(userID string) ([]model.To...
function NewMemoryTodoRepository (line 34) | func NewMemoryTodoRepository() TodoRepository {
FILE: _examples/auth/jwt/tutorial/domain/repository/user_repository.go
type UserRepository (line 12) | type UserRepository interface
type memoryUserRepository (line 23) | type memoryUserRepository struct
method Create (line 36) | func (r *memoryUserRepository) Create(username, password string, roles...
method GetByUsernameAndPassword (line 62) | func (r *memoryUserRepository) GetByUsernameAndPassword(username, pass...
method GetAll (line 76) | func (r *memoryUserRepository) GetAll() ([]model.User, error) {
function NewMemoryUserRepository (line 31) | func NewMemoryUserRepository() UserRepository {
FILE: _examples/auth/jwt/tutorial/go-client/client.go
type RequestOption (line 19) | type RequestOption
function WithAccessToken (line 22) | func WithAccessToken(token []byte) RequestOption {
function WithContentType (line 31) | func WithContentType(cType string) RequestOption {
function WithContentLength (line 39) | func WithContentLength(length int) RequestOption {
function Do (line 47) | func Do(method, url string, body io.Reader, opts ...RequestOption) (*htt...
function JSON (line 63) | func JSON(method, url string, v any, opts ...RequestOption) (*http.Respo...
function Form (line 75) | func Form(method, url string, formData url.Values, opts ...RequestOption...
function BindResponse (line 88) | func BindResponse(resp *http.Response, dest any) error {
function RawResponse (line 104) | func RawResponse(resp *http.Response) ([]byte, error) {
FILE: _examples/auth/jwt/tutorial/go-client/main.go
constant base (line 13) | base = "http://localhost:8080"
function main (line 15) | func main() {
function authenticate (line 31) | func authenticate(username, password string) ([]byte, error) {
function createTodo (line 47) | func createTodo(accessToken []byte, title, body string) (model.Todo, err...
FILE: _examples/auth/jwt/tutorial/main.go
function main (line 15) | func main() {
FILE: _examples/auth/jwt/tutorial/util/app.go
constant Version (line 5) | Version = "0.0.1"
constant AppName (line 6) | AppName = "myapp"
FILE: _examples/auth/jwt/tutorial/util/password.go
function MustGeneratePassword (line 6) | func MustGeneratePassword(userPassword string) []byte {
function GeneratePassword (line 17) | func GeneratePassword(userPassword string) ([]byte, error) {
function ValidatePassword (line 22) | func ValidatePassword(userPassword string, hashed []byte) bool {
FILE: _examples/auth/jwt/tutorial/util/uuid.go
function MustGenerateUUID (line 6) | func MustGenerateUUID() string {
function GenerateUUID (line 16) | func GenerateUUID() (string, error) {
FILE: _examples/auth/permissions/main.go
function main (line 26) | func main() {
FILE: _examples/auth/recaptcha/custom_form/main.go
constant recaptchaPublic (line 13) | recaptchaPublic = "6Lf3WywUAAAAAKNfAm5DP2J5ahqedtZdHTYaKkJ6"
constant recaptchaSecret (line 14) | recaptchaSecret = "6Lf3WywUAAAAAJpArb8nW_LCL_PuPuokmEABFfgw"
function main (line 17) | func main() {
function showRecaptchaForm (line 36) | func showRecaptchaForm(ctx iris.Context) {
function postComment (line 41) | func postComment(ctx iris.Context) {
FILE: _examples/auth/recaptcha/main.go
constant recaptchaPublic (line 10) | recaptchaPublic = ""
constant recaptchaSecret (line 11) | recaptchaSecret = ""
function showRecaptchaForm (line 14) | func showRecaptchaForm(ctx iris.Context, path string) {
function main (line 18) | func main() {
FILE: _examples/bootstrapper/bootstrap/bootstrapper.go
type Configurator (line 16) | type Configurator
type Bootstrapper (line 18) | type Bootstrapper struct
method SetupViews (line 44) | func (b *Bootstrapper) SetupViews(viewsDir string) {
method SetupSessions (line 49) | func (b *Bootstrapper) SetupSessions(expires time.Duration, cookieHash...
method SetupWebsockets (line 58) | func (b *Bootstrapper) SetupWebsockets(endpoint string, handler websoc...
method SetupErrorHandlers (line 66) | func (b *Bootstrapper) SetupErrorHandlers() {
method Configure (line 96) | func (b *Bootstrapper) Configure(cs ...Configurator) {
method Bootstrap (line 105) | func (b *Bootstrapper) Bootstrap() *Bootstrapper {
method Listen (line 125) | func (b *Bootstrapper) Listen(addr string, cfgs ...iris.Configurator) {
function New (line 28) | func New(appName, appOwner string, cfgs ...Configurator) *Bootstrapper {
constant StaticAssets (line 90) | StaticAssets = "./public/"
constant Favicon (line 92) | Favicon = "favicon.ico"
FILE: _examples/bootstrapper/main.go
function newApp (line 9) | func newApp() *bootstrap.Bootstrapper {
function main (line 16) | func main() {
FILE: _examples/bootstrapper/main_test.go
function TestApp (line 10) | func TestApp(t *testing.T) {
FILE: _examples/bootstrapper/middleware/identity/identity.go
function New (line 13) | func New(b *bootstrap.Bootstrapper) iris.Handler {
function Configure (line 30) | func Configure(b *bootstrap.Bootstrapper) {
FILE: _examples/bootstrapper/routes/follower.go
function GetFollowerHandler (line 8) | func GetFollowerHandler(ctx iris.Context) {
FILE: _examples/bootstrapper/routes/following.go
function GetFollowingHandler (line 8) | func GetFollowingHandler(ctx iris.Context) {
FILE: _examples/bootstrapper/routes/index.go
function GetIndexHandler (line 10) | func GetIndexHandler(ctx iris.Context) {
FILE: _examples/bootstrapper/routes/like.go
function GetLikeHandler (line 8) | func GetLikeHandler(ctx iris.Context) {
FILE: _examples/bootstrapper/routes/routes.go
function Configure (line 8) | func Configure(b *bootstrap.Bootstrapper) {
FILE: _examples/caddy/server1/main.go
function main (line 8) | func main() {
type Layout (line 21) | type Layout struct
type Controller (line 26) | type Controller struct
method BeginRequest (line 31) | func (c *Controller) BeginRequest(ctx iris.Context) {
method EndRequest (line 38) | func (c *Controller) EndRequest(ctx iris.Context) {}
method Get (line 41) | func (c *Controller) Get() mvc.View {
FILE: _examples/caddy/server2/main.go
type postValue (line 8) | type postValue
function main (line 10) | func main() {
type UserController (line 28) | type UserController struct
method Get (line 31) | func (c *UserController) Get() string {
method GetBy (line 39) | func (c *UserController) GetBy(id int64) User {
method Post (line 45) | func (c *UserController) Post(post postValue) string {
method PutBy (line 51) | func (c *UserController) PutBy(id int) string {
method DeleteBy (line 57) | func (c *UserController) DeleteBy(id int) bool {
method GetFollowersBy (line 65) | func (c *UserController) GetFollowersBy(id int) []User {
type User (line 36) | type User struct
FILE: _examples/compression/client-using-iris/main.go
constant baseURL (line 13) | baseURL = "http://localhost:8080"
constant encoding (line 21) | encoding = context.BROTLI
function main (line 25) | func main() {
function getExample (line 32) | func getExample() {
type payload (line 62) | type payload struct
function postExample (line 66) | func postExample() {
FILE: _examples/compression/client/main.go
constant baseURL (line 14) | baseURL = "http://localhost:8080"
function main (line 16) | func main() {
function getExample (line 23) | func getExample() {
type payload (line 53) | type payload struct
function postExample (line 57) | func postExample() {
FILE: _examples/compression/main.go
function main (line 5) | func main() {
function newApp (line 11) | func newApp() *iris.Application {
type payload (line 22) | type payload struct
function send (line 26) | func send(ctx iris.Context) {
function receive (line 32) | func receive(ctx iris.Context) {
FILE: _examples/compression/main_test.go
function TestCompression (line 14) | func TestCompression(t *testing.T) {
function TestCompressionAfterRecorder (line 22) | func TestCompressionAfterRecorder(t *testing.T) {
function TestCompressionBeforeRecorder (line 40) | func TestCompressionBeforeRecorder(t *testing.T) {
function testBody (line 58) | func testBody(t *testing.T, req *httptest.Request, expectedReply any) {
FILE: _examples/configuration/from-configuration-structure/main.go
function main (line 7) | func main() {
FILE: _examples/configuration/from-toml-file/main.go
function main (line 7) | func main() {
FILE: _examples/configuration/from-yaml-file/main.go
function main (line 7) | func main() {
FILE: _examples/configuration/from-yaml-file/shared-configuration/main.go
function main (line 7) | func main() {
FILE: _examples/configuration/functional/main.go
function main (line 7) | func main() {
FILE: _examples/configuration/multi-environments/api/configuration.go
type Configuration (line 10) | type Configuration struct
method BindFile (line 20) | func (c *Configuration) BindFile(filename string) error {
FILE: _examples/configuration/multi-environments/api/server.go
type Server (line 13) | type Server struct
method Build (line 34) | func (s *Server) Build() error {
method configureRouter (line 47) | func (s *Server) configureRouter() error {
method registerMiddlewares (line 57) | func (s *Server) registerMiddlewares() {
method registerRoutes (line 71) | func (s *Server) registerRoutes() {
method AddCloser (line 82) | func (s *Server) AddCloser(closers ...func()) {
method Shutdown (line 96) | func (s *Server) Shutdown() error {
method Listen (line 113) | func (s *Server) Listen() error {
function NewServer (line 22) | func NewServer(congig Configuration) *Server {
FILE: _examples/configuration/multi-environments/cmd/root_command.go
constant defaultConfigFilename (line 9) | defaultConfigFilename = "server.dev.yml"
function New (line 18) | func New() *cobra.Command {
function startServer (line 47) | func startServer() error {
FILE: _examples/configuration/multi-environments/main.go
function main (line 10) | func main() {
FILE: _examples/configuration/viper/config/config.go
function init (line 12) | func init() {
function loadConfiguration (line 36) | func loadConfiguration() {
FILE: _examples/configuration/viper/main.go
function main (line 11) | func main() {
FILE: _examples/convert-handlers/negroni-like/main.go
function main (line 9) | func main() {
function negronilikeTestMiddleware (line 32) | func negronilikeTestMiddleware(w http.ResponseWriter, r *http.Request, n...
FILE: _examples/convert-handlers/nethttp/main.go
function main (line 9) | func main() {
function nativeTestMiddleware (line 29) | func nativeTestMiddleware(w http.ResponseWriter, r *http.Request) {
FILE: _examples/convert-handlers/nethttp/wrapper/main.go
function main (line 10) | func main() {
function index (line 28) | func index(ctx iris.Context) {
type Options (line 32) | type Options struct
type contextKey (line 36) | type contextKey
function StandardWrapper (line 42) | func StandardWrapper(opts Options) func(http.Handler) http.Handler {
FILE: _examples/convert-handlers/real-usecase-raven/wrapping-the-router/main.go
function init (line 15) | func init() {
function main (line 19) | func main() {
FILE: _examples/convert-handlers/real-usecase-raven/writing-middleware/main.go
function irisRavenMiddleware (line 27) | func irisRavenMiddleware(ctx iris.Context) {
function init (line 44) | func init() {
function main (line 48) | func main() {
FILE: _examples/cookies/basic/main.go
function newApp (line 5) | func newApp() *iris.Application {
function main (line 57) | func main() {
FILE: _examples/cookies/basic/main_test.go
function TestCookiesBasic (line 10) | func TestCookiesBasic(t *testing.T) {
FILE: _examples/cookies/options/main.go
function main (line 7) | func main() {
function newApp (line 16) | func newApp() *iris.Application {
function withCookieOptions (line 27) | func withCookieOptions(ctx iris.Context) {
function setCookie (line 56) | func setCookie(ctx iris.Context) {
function getCookie (line 71) | func getCookie(ctx iris.Context) {
function removeCookie (line 78) | func removeCookie(ctx iris.Context) {
FILE: _examples/cookies/options/main_test.go
function TestCookieOptions (line 10) | func TestCookieOptions(t *testing.T) {
FILE: _examples/cookies/securecookie/main.go
function main (line 14) | func main() {
function newApp (line 22) | func newApp() *iris.Application {
function useSecureCookies (line 60) | func useSecureCookies() iris.Handler {
FILE: _examples/cookies/securecookie/main_test.go
function TestSecureCookie (line 10) | func TestSecureCookie(t *testing.T) {
FILE: _examples/database/mongodb/api/store/movie.go
type MovieHandler (line 10) | type MovieHandler struct
method GetAll (line 18) | func (h *MovieHandler) GetAll(ctx iris.Context) {
method Get (line 33) | func (h *MovieHandler) Get(ctx iris.Context) {
method Add (line 49) | func (h *MovieHandler) Add(ctx iris.Context) {
method Update (line 68) | func (h *MovieHandler) Update(ctx iris.Context) {
method Delete (line 89) | func (h *MovieHandler) Delete(ctx iris.Context) {
function NewMovieHandler (line 14) | func NewMovieHandler(service store.MovieService) *MovieHandler {
FILE: _examples/database/mongodb/env/env.go
function parse (line 22) | func parse() {
function Load (line 38) | func Load(envFileName string) {
function getDefault (line 69) | func getDefault(key string, def string) string {
function fileExists (line 79) | func fileExists(filename string) bool {
FILE: _examples/database/mongodb/httputil/error.go
function RuntimeCallerStack (line 25) | func RuntimeCallerStack() (s string) {
type HTTPError (line 47) | type HTTPError struct
method writeHeaders (line 79) | func (err HTTPError) writeHeaders(ctx iris.Context) {
function newError (line 59) | func newError(statusCode int, err error, format string, args ...any) HTT...
function LogFailure (line 85) | func LogFailure(logger io.Writer, ctx iris.Context, err HTTPError) {
function Fail (line 95) | func Fail(ctx iris.Context, statusCode int, err error, format string, ar...
function FailJSON (line 105) | func FailJSON(ctx iris.Context, statusCode int, err error, format string...
function InternalServerError (line 117) | func InternalServerError(ctx iris.Context, err error, format string, arg...
function InternalServerErrorJSON (line 123) | func InternalServerErrorJSON(ctx iris.Context, err error, format string,...
function UnauthorizedJSON (line 128) | func UnauthorizedJSON(ctx iris.Context, err error, format string, args ....
FILE: _examples/database/mongodb/main.go
constant version (line 26) | version = "0.0.1"
function init (line 28) | func init() {
function main (line 38) | func main() {
FILE: _examples/database/mongodb/store/movie.go
type Movie (line 14) | type Movie struct
type MovieService (line 21) | type MovieService interface
type movieService (line 29) | type movieService struct
method GetAll (line 51) | func (s *movieService) GetAll(ctx context.Context) ([]Movie, error) {
method GetByID (line 95) | func (s *movieService) GetByID(ctx context.Context, id string) (Movie,...
method Create (line 109) | func (s *movieService) Create(ctx context.Context, m *Movie) error {
method Update (line 127) | func (s *movieService) Update(ctx context.Context, id string, m Movie)...
method Delete (line 166) | func (s *movieService) Delete(ctx context.Context, id string) error {
function NewMovieService (line 35) | func NewMovieService(collection *mongo.Collection) MovieService {
function matchID (line 83) | func matchID(id string) (bson.D, error) {
FILE: _examples/database/mysql/api/api.go
function Router (line 16) | func Router(db sql.Database, secret string) func(iris.Party) {
function writeToken (line 77) | func writeToken(signer *jwt.Signer) iris.Handler {
FILE: _examples/database/mysql/api/category_handler.go
type CategoryHandler (line 12) | type CategoryHandler struct
method GetByID (line 25) | func (h *CategoryHandler) GetByID(ctx iris.Context) {
method List (line 63) | func (h *CategoryHandler) List(ctx iris.Context) {
method Create (line 83) | func (h *CategoryHandler) Create(ctx iris.Context) {
method Update (line 108) | func (h *CategoryHandler) Update(ctx iris.Context) {
method PartialUpdate (line 136) | func (h *CategoryHandler) PartialUpdate(ctx iris.Context) {
method Delete (line 166) | func (h *CategoryHandler) Delete(ctx iris.Context) {
method ListProducts (line 195) | func (h *CategoryHandler) ListProducts(ctx iris.Context) {
method InsertProducts (line 222) | func (h *CategoryHandler) InsertProducts(productService *service.Produ...
function NewCategoryHandler (line 19) | func NewCategoryHandler(service *service.CategoryService) *CategoryHandl...
FILE: _examples/database/mysql/api/helper.go
constant debug (line 9) | debug = true
function debugf (line 11) | func debugf(format string, args ...any) {
function writeInternalServerError (line 19) | func writeInternalServerError(ctx iris.Context) {
function writeEntityNotFound (line 23) | func writeEntityNotFound(ctx iris.Context) {
FILE: _examples/database/mysql/api/httperror.go
type Error (line 11) | type Error struct
method Error (line 42) | func (e Error) Error() string {
method Is (line 48) | func (e Error) Is(target error) bool {
function newError (line 19) | func newError(statusCode int, method, path, format string, args ...any) ...
FILE: _examples/database/mysql/api/product_handler.go
type ProductHandler (line 15) | type ProductHandler struct
method GetByID (line 30) | func (h *ProductHandler) GetByID(ctx iris.Context) {
method List (line 55) | func (h *ProductHandler) List(ctx iris.Context) {
method Create (line 74) | func (h *ProductHandler) Create(ctx iris.Context) {
method Update (line 99) | func (h *ProductHandler) Update(ctx iris.Context) {
method PartialUpdate (line 127) | func (h *ProductHandler) PartialUpdate(ctx iris.Context) {
method Delete (line 157) | func (h *ProductHandler) Delete(ctx iris.Context) {
function NewProductHandler (line 21) | func NewProductHandler(service *service.ProductService) *ProductHandler {
FILE: _examples/database/mysql/cache/groupcache.go
type Service (line 17) | type Service interface
type Cache (line 25) | type Cache struct
method Get (line 51) | func (c *Cache) Get(ctx context.Context, key string, dest groupcache.S...
method GetByID (line 113) | func (c *Cache) GetByID(ctx context.Context, id string, dest *[]byte) ...
method List (line 118) | func (c *Cache) List(ctx context.Context, rawQuery string, dest *[]byt...
function New (line 36) | func New(service Service, name string, maxAge time.Duration) *Cache {
constant prefixID (line 45) | prefixID = "#"
constant prefixList (line 46) | prefixList = "["
FILE: _examples/database/mysql/entity/category.go
type Category (line 11) | type Category struct
method TableName (line 24) | func (c *Category) TableName() string {
method PrimaryKey (line 29) | func (c *Category) PrimaryKey() string {
method SortBy (line 35) | func (c *Category) SortBy() string {
method Scan (line 40) | func (c *Category) Scan(rows *sql.Rows) error {
type Categories (line 47) | type Categories
method Scan (line 50) | func (cs *Categories) Scan(rows *sql.Rows) (err error) {
FILE: _examples/database/mysql/entity/product.go
type Product (line 10) | type Product struct
method TableName (line 22) | func (p Product) TableName() string {
method PrimaryKey (line 27) | func (p *Product) PrimaryKey() string {
method SortBy (line 33) | func (p *Product) SortBy() string {
method ValidateInsert (line 38) | func (p *Product) ValidateInsert() bool {
method Scan (line 43) | func (p *Product) Scan(rows *sql.Rows) error {
type Products (line 50) | type Products
method Scan (line 53) | func (ps *Products) Scan(rows *sql.Rows) (err error) {
FILE: _examples/database/mysql/main.go
function main (line 14) | func main() {
function getenv (line 37) | func getenv(key string, def string) string {
FILE: _examples/database/mysql/migration/db.sql
type categories (line 9) | CREATE TABLE categories (
type products (line 20) | CREATE TABLE products (
FILE: _examples/database/mysql/service/category_service.go
type CategoryService (line 15) | type CategoryService struct
method Insert (line 25) | func (s *CategoryService) Insert(ctx context.Context, e entity.Categor...
method Update (line 42) | func (s *CategoryService) Update(ctx context.Context, e entity.Categor...
method PartialUpdate (line 72) | func (s *CategoryService) PartialUpdate(ctx context.Context, id int64,...
function NewCategoryService (line 20) | func NewCategoryService(db sql.Database) *CategoryService {
FILE: _examples/database/mysql/service/category_service_test.go
function TestCategoryServiceInsert (line 13) | func TestCategoryServiceInsert(t *testing.T) {
FILE: _examples/database/mysql/service/product_service.go
type ProductService (line 16) | type ProductService struct
method Insert (line 27) | func (s *ProductService) Insert(ctx context.Context, e entity.Product)...
method BatchInsert (line 44) | func (s *ProductService) BatchInsert(ctx context.Context, products []e...
method Update (line 79) | func (s *ProductService) Update(ctx context.Context, e entity.Product)...
method PartialUpdate (line 108) | func (s *ProductService) PartialUpdate(ctx context.Context, id int64, ...
function NewProductService (line 22) | func NewProductService(db sql.Database) *ProductService {
FILE: _examples/database/mysql/sql/mysql.go
type MySQL (line 13) | type MySQL struct
method CreateDatabase (line 46) | func (db *MySQL) CreateDatabase(database string) error {
method Drop (line 53) | func (db *MySQL) Drop(database string) error {
method Select (line 60) | func (db *MySQL) Select(ctx context.Context, dest any, query string, a...
method Get (line 102) | func (db *MySQL) Get(ctx context.Context, dest any, query string, args...
method Exec (line 121) | func (db *MySQL) Exec(ctx context.Context, query string, args ...any) ...
function ConnectMySQL (line 29) | func ConnectMySQL(dsn string) (*MySQL, error) {
FILE: _examples/database/mysql/sql/service.go
type Service (line 16) | type Service struct
method DB (line 27) | func (s *Service) DB() Database {
method RecordInfo (line 32) | func (s *Service) RecordInfo() Record {
method GetByID (line 41) | func (s *Service) GetByID(ctx context.Context, dest any, id int64) err...
method Count (line 57) | func (s *Service) Count(ctx context.Context) (total int64, err error) {
method List (line 125) | func (s *Service) List(ctx context.Context, dest any, opts ListOptions...
method DeleteByID (line 142) | func (s *Service) DeleteByID(ctx context.Context, id int64) (int, erro...
method PartialUpdate (line 163) | func (s *Service) PartialUpdate(ctx context.Context, id int64, schema ...
function NewService (line 22) | func NewService(db Database, of Record) *Service {
type ListOptions (line 66) | type ListOptions struct
method Where (line 80) | func (opt ListOptions) Where(colName string, colValue any) ListOptions {
method BuildQuery (line 88) | func (opt ListOptions) BuildQuery() (q string, args []any) {
function ParseListOptions (line 114) | func ParseListOptions(q url.Values) ListOptions {
function GetAffectedRows (line 216) | func GetAffectedRows(result sql.Result) int {
constant ascending (line 226) | ascending = "ASC"
constant descending (line 227) | descending = "DESC"
function ParseOrder (line 232) | func ParseOrder(order string) string {
FILE: _examples/database/mysql/sql/sql.go
type Database (line 9) | type Database interface
type Record (line 19) | type Record interface
type Sorted (line 33) | type Sorted interface
type Scannable (line 38) | type Scannable interface
FILE: _examples/database/orm/gorm/main.go
type User (line 13) | type User struct
method TableName (line 21) | func (u User) TableName() string {
method Serializer (line 35) | func (self User) Serializer() UserSerializer {
type UserSerializer (line 25) | type UserSerializer struct
function main (line 47) | func main() {
type patchParam (line 172) | type patchParam struct
FILE: _examples/database/orm/reform/controllers/person_controller.go
type PersonController (line 14) | type PersonController struct
method Get (line 24) | func (c *PersonController) Get() ([]reform.Struct, error) {
method GetBy (line 30) | func (c *PersonController) GetBy(id int32) (reform.Record, error) {
method Post (line 36) | func (c *PersonController) Post(p *models.Person) int {
FILE: _examples/database/orm/reform/main.go
function main (line 24) | func main() {
FILE: _examples/database/orm/reform/models/person.go
type Person (line 7) | type Person struct
FILE: _examples/database/orm/reform/models/person_reform.go
type personTableType (line 13) | type personTableType struct
method Schema (line 19) | func (v *personTableType) Schema() string {
method Name (line 24) | func (v *personTableType) Name() string {
method Columns (line 29) | func (v *personTableType) Columns() []string {
method NewStruct (line 34) | func (v *personTableType) NewStruct() reform.Struct {
method NewRecord (line 39) | func (v *personTableType) NewRecord() reform.Record {
method PKColumnIndex (line 44) | func (v *personTableType) PKColumnIndex() uint {
method String (line 55) | func (s Person) String() string {
method Values (line 67) | func (s *Person) Values() []any {
method Pointers (line 79) | func (s *Person) Pointers() []any {
method View (line 90) | func (s *Person) View() reform.View {
method Table (line 95) | func (s *Person) Table() reform.Table {
method PKValue (line 101) | func (s *Person) PKValue() any {
method PKPointer (line 107) | func (s *Person) PKPointer() any {
method HasPK (line 112) | func (s *Person) HasPK() bool {
method SetPK (line 117) | func (s *Person) SetPK(pk any) {
function init (line 134) | func init() {
FILE: _examples/database/orm/sqlx/main.go
type Person (line 24) | type Person struct
constant schema (line 31) | schema = `
function main (line 39) | func main() {
FILE: _examples/database/sqlx/main.go
constant host (line 18) | host = "localhost"
constant port (line 19) | port = 5432
constant user (line 20) | user = "postgres"
constant password (line 21) | password = "admin!123"
constant dbname (line 22) | dbname = "test"
function main (line 25) | func main() {
function mustConnectDB (line 54) | func mustConnectDB() *sql.DB {
function mustCreateExtensions (line 70) | func mustCreateExtensions(ctx context.Context, db *sql.DB) {
function mustCreateTables (line 78) | func mustCreateTables(ctx context.Context, db *sql.DB) {
type Event (line 94) | type Event struct
function insertEvent (line 103) | func insertEvent(ctx context.Context, db *sql.DB, evt Event) (id string,...
function listEvents (line 109) | func listEvents(ctx context.Context, db *sql.DB) ([]Event, error) {
function getEvent (line 126) | func getEvent(ctx context.Context, db *sql.DB, id string) (evt Event, er...
function insert (line 144) | func insert(db *sql.DB) iris.Handler {
function list (line 162) | func list(db *sql.DB) iris.Handler {
function getByID (line 174) | func getByID(db *sql.DB) iris.Handler {
FILE: _examples/dependency-injection/basic/main.go
type testInput (line 10) | type testInput struct
type testOutput (line 14) | type testOutput struct
function handler (line 20) | func handler(id int, in testInput) testOutput {
function configureAPI (line 27) | func configureAPI(api *iris.APIContainer) {
function main (line 40) | func main() {
FILE: _examples/dependency-injection/basic/middleware/main.go
type testInput (line 10) | type testInput struct
type testOutput (line 14) | type testOutput struct
function handler (line 20) | func handler(id int, in testInput) testOutput {
function middleware (line 29) | func middleware(in testInput) (int, error) {
function newApp (line 42) | func newApp() *iris.Application {
function main (line 68) | func main() {
FILE: _examples/dependency-injection/basic/middleware/main_test.go
function TestDependencyInjectionBasic_Middleware (line 9) | func TestDependencyInjectionBasic_Middleware(t *testing.T) {
FILE: _examples/dependency-injection/context-register-dependency/main.go
function main (line 5) | func main() {
function commonHandler (line 39) | func commonHandler(ctx iris.Context) {
function handlerWithDependencies (line 44) | func handlerWithDependencies(role Role) string {
type Role (line 51) | type Role struct
constant roleContextKey (line 55) | roleContextKey = "myapp.role"
function RoleMiddleware (line 58) | func RoleMiddleware(ctx iris.Context) {
function GetRole (line 84) | func GetRole(ctx iris.Context) (Role, bool) {
FILE: _examples/dependency-injection/jwt/contrib/main.go
function main (line 11) | func main() {
function register (line 18) | func register(api *iris.APIContainer) {
function writeToken (line 50) | func writeToken() string {
function restrictedPage (line 59) | func restrictedPage() string {
function restrictedPageWithBindedTokenPage (line 63) | func restrictedPageWithBindedTokenPage(token *jwt.Token) string {
FILE: _examples/dependency-injection/jwt/main.go
function main (line 10) | func main() {
function register (line 21) | func register(api *iris.APIContainer) {
type userClaims (line 49) | type userClaims struct
function writeToken (line 53) | func writeToken(ctx iris.Context) {
function restrictedPage (line 67) | func restrictedPage(claims userClaims) string {
FILE: _examples/dependency-injection/overview/datamodels/movie.go
type Movie (line 12) | type Movie struct
FILE: _examples/dependency-injection/overview/main.go
function main (line 15) | func main() {
FILE: _examples/dependency-injection/overview/repositories/movie_repository.go
type Query (line 13) | type Query
type MovieRepository (line 18) | type MovieRepository interface
function NewMovieRepository (line 30) | func NewMovieRepository(source map[uint64]datamodels.Movie) MovieReposit...
type movieMemoryRepository (line 36) | type movieMemoryRepository struct
method Exec (line 48) | func (r *movieMemoryRepository) Exec(query Query, action Query, action...
method Select (line 86) | func (r *movieMemoryRepository) Select(query Query) (movie datamodels....
method SelectMany (line 102) | func (r *movieMemoryRepository) SelectMany(query Query, limit int) (re...
method InsertOrUpdate (line 114) | func (r *movieMemoryRepository) InsertOrUpdate(movie datamodels.Movie)...
method Delete (line 171) | func (r *movieMemoryRepository) Delete(query Query, limit int) bool {
constant ReadOnlyMode (line 43) | ReadOnlyMode = iota
constant ReadWriteMode (line 45) | ReadWriteMode
FILE: _examples/dependency-injection/overview/services/movie_service.go
type MovieService (line 16) | type MovieService interface
function NewMovieService (line 24) | func NewMovieService(repo repositories.MovieRepository) MovieService {
type movieService (line 30) | type movieService struct
method GetAll (line 35) | func (s *movieService) GetAll() []datamodels.Movie {
method GetByID (line 42) | func (s *movieService) GetByID(id uint64) (datamodels.Movie, bool) {
method UpdatePosterAndGenreByID (line 49) | func (s *movieService) UpdatePosterAndGenreByID(id uint64, poster stri...
method DeleteByID (line 61) | func (s *movieService) DeleteByID(id uint64) bool {
FILE: _examples/dependency-injection/overview/web/routes/hello.go
function Hello (line 25) | func Hello() hero.Result {
function HelloName (line 40) | func HelloName(name string) hero.Result {
FILE: _examples/dependency-injection/overview/web/routes/movies.go
function Movies (line 17) | func Movies(service services.MovieService) (results []datamodels.Movie) {
function MovieByID (line 24) | func MovieByID(service services.MovieService, id uint64) (movie datamode...
function UpdateMovieByID (line 31) | func UpdateMovieByID(ctx iris.Context, service services.MovieService, id...
function DeleteMovieByID (line 50) | func DeleteMovieByID(service services.MovieService, id uint64) any {
FILE: _examples/dependency-injection/sessions/main.go
function main (line 12) | func main() {
function registerRoutes (line 32) | func registerRoutes(api *iris.APIContainer) {
FILE: _examples/dependency-injection/sessions/routes/index.go
function Index (line 10) | func Index(session *sessions.Session) string {
FILE: _examples/dependency-injection/smart-contract/main.go
function main (line 18) | func main() {
function newApp (line 36) | func newApp() *iris.Application {
function registerUsersRoutes (line 51) | func registerUsersRoutes(usersRouter iris.Party) {
type user (line 57) | type user struct
function getAllUsersHandler (line 68) | func getAllUsersHandler(ctx iris.Context) {
function registerUserRoutes (line 80) | func registerUserRoutes(userRouter *iris.APIContainer) {
function getUserHandler (line 105) | func getUserHandler(ctx iris.Context, u *user) {
function getUserAgeHandler (line 109) | func getUserAgeHandler(u *user) string {
type httpError (line 118) | type httpError struct
method Error (line 123) | func (h httpError) Error() string {
function fail (line 127) | func fail(ctx iris.Context, statusCode int, format string, a ...any) {
function sendJSON (line 144) | func sendJSON(ctx iris.Context, resp any) (err error) {
FILE: _examples/desktop/blink/main.go
constant addr (line 11) | addr = "127.0.0.1:8080"
function main (line 17) | func main() {
function runServer (line 22) | func runServer() {
function showAndWaitWindow (line 30) | func showAndWaitWindow() {
FILE: _examples/desktop/lorca/main.go
constant addr (line 8) | addr = "127.0.0.1:8080"
function main (line 14) | func main() {
function runServer (line 19) | func runServer() {
function showAndWaitWindow (line 27) | func showAndWaitWindow() {
FILE: _examples/desktop/webview/main.go
constant addr (line 8) | addr = "127.0.0.1:8080"
function main (line 28) | func main() {
function runServer (line 33) | func runServer() {
function showAndWaitWindow (line 41) | func showAndWaitWindow() {
FILE: _examples/dropzonejs/src/main.go
constant uploadsDir (line 21) | uploadsDir = "./public/uploads/"
type uploadedFile (line 23) | type uploadedFile struct
type uploadedFiles (line 29) | type uploadedFiles struct
method scan (line 54) | func (f *uploadedFiles) scan(dir string) {
method add (line 67) | func (f *uploadedFiles) add(name string, size int64) uploadedFile {
method createThumbnail (line 80) | func (f *uploadedFiles) createThumbnail(uf uploadedFile) {
function scanUploads (line 35) | func scanUploads(dir string) *uploadedFiles {
function main (line 121) | func main() {
FILE: _examples/dropzonejs/src/public/js/dropzone.js
function ctor (line 31) | function ctor() { this.constructor = child; }
function Emitter (line 37) | function Emitter() {}
function Dropzone (line 444) | function Dropzone(element1, options) {
function ExifRestore (line 1832) | function ExifRestore() {}
FILE: _examples/file-server/basic/main.go
function newApp (line 7) | func newApp() *iris.Application {
function main (line 63) | func main() {
FILE: _examples/file-server/basic/main_test.go
type resource (line 13) | type resource
method contentType (line 15) | func (r resource) contentType() string {
method String (line 30) | func (r resource) String() string {
method strip (line 34) | func (r resource) strip(strip string) string {
method loadFromBase (line 39) | func (r resource) loadFromBase(dir string, strip string) string {
function TestFileServerBasic (line 60) | func TestFileServerBasic(t *testing.T) {
function TestHandleDirDot (line 97) | func TestHandleDirDot(t *testing.T) {
FILE: _examples/file-server/embedding-files-into-app-bindata/bindata.go
function bindataRead (line 21) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 41) | type asset struct
type bindataFileInfo (line 46) | type bindataFileInfo struct
method Name (line 54) | func (fi bindataFileInfo) Name() string {
method Size (line 59) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 64) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 69) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 74) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 79) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 83) | type assetFile struct
method Close (line 127) | func (f *assetFile) Close() error {
method Readdir (line 132) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 148) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 90) | type assetOperator struct
method Open (line 93) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 156) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 165) | func AssetFile() http.FileSystem {
function cssMainCssBytes (line 171) | func cssMainCssBytes() ([]byte, error) {
function cssMainCss (line 178) | func cssMainCss() (*asset, error) {
function faviconIcoBytes (line 191) | func faviconIcoBytes() ([]byte, error) {
function faviconIco (line 198) | func faviconIco() (*asset, error) {
function jsMainJsBytes (line 211) | func jsMainJsBytes() ([]byte, error) {
function jsMainJs (line 218) | func jsMainJs() (*asset, error) {
function Asset (line 232) | func Asset(name string) ([]byte, error) {
function MustAsset (line 246) | func MustAsset(name string) []byte {
function AssetInfo (line 258) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 271) | func AssetNames() []string {
function AssetDir (line 301) | func AssetDir(name string) ([]string, error) {
type bintree (line 323) | type bintree struct
function RestoreAsset (line 339) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 364) | func RestoreAssets(dir, name string) error {
function _filePath (line 380) | func _filePath(dir, name string) string {
FILE: _examples/file-server/embedding-files-into-app-bindata/main.go
function newApp (line 15) | func newApp() *iris.Application {
function main (line 37) | func main() {
FILE: _examples/file-server/embedding-files-into-app-bindata/main_test.go
type resource (line 13) | type resource
method contentType (line 18) | func (r resource) contentType() string {
method String (line 33) | func (r resource) String() string {
method strip (line 37) | func (r resource) strip(strip string) string {
method loadFromBase (line 42) | func (r resource) loadFromBase(dir string) string {
function TestEmbeddingFilesIntoApp (line 70) | func TestEmbeddingFilesIntoApp(t *testing.T) {
FILE: _examples/file-server/embedding-files-into-app/main.go
function newApp (line 12) | func newApp() *iris.Application {
function main (line 34) | func main() {
FILE: _examples/file-server/embedding-files-into-app/main_test.go
type resource (line 13) | type resource
method contentType (line 18) | func (r resource) contentType() string {
method String (line 33) | func (r resource) String() string {
method strip (line 37) | func (r resource) strip(strip string) string {
method loadFromBase (line 42) | func (r resource) loadFromBase(dir string) string {
function TestEmbeddingFilesIntoApp (line 70) | func TestEmbeddingFilesIntoApp(t *testing.T) {
FILE: _examples/file-server/embedding-gzipped-files-into-app-bindata/bindata.go
function bindataRead (line 21) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 41) | type asset struct
type bindataFileInfo (line 46) | type bindataFileInfo struct
method Name (line 54) | func (fi bindataFileInfo) Name() string {
method Size (line 59) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 64) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 69) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 74) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 79) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 83) | type assetFile struct
method Close (line 127) | func (f *assetFile) Close() error {
method Readdir (line 132) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 148) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 90) | type assetOperator struct
method Open (line 93) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 156) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 165) | func AssetFile() http.FileSystem {
function cssMainCssBytes (line 171) | func cssMainCssBytes() ([]byte, error) {
function cssMainCss (line 178) | func cssMainCss() (*asset, error) {
function faviconIcoBytes (line 191) | func faviconIcoBytes() ([]byte, error) {
function faviconIco (line 198) | func faviconIco() (*asset, error) {
function jsMainJsBytes (line 211) | func jsMainJsBytes() ([]byte, error) {
function jsMainJs (line 218) | func jsMainJs() (*asset, error) {
function Asset (line 232) | func Asset(name string) ([]byte, error) {
function MustAsset (line 246) | func MustAsset(name string) []byte {
function AssetInfo (line 258) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 271) | func AssetNames() []string {
function AssetDir (line 301) | func AssetDir(name string) ([]string, error) {
type bintree (line 323) | type bintree struct
function RestoreAsset (line 339) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 364) | func RestoreAssets(dir, name string) error {
function _filePath (line 380) | func _filePath(dir, name string) string {
FILE: _examples/file-server/embedding-gzipped-files-into-app-bindata/main.go
function newApp (line 37) | func newApp() *iris.Application {
function main (line 43) | func main() {
FILE: _examples/file-server/embedding-gzipped-files-into-app-bindata/main_test.go
type resource (line 15) | type resource
method contentType (line 20) | func (r resource) contentType() string {
method String (line 35) | func (r resource) String() string {
method strip (line 39) | func (r resource) strip(strip string) string {
method loadFromBase (line 44) | func (r resource) loadFromBase(dir string) string {
function TestEmbeddingGzipFilesIntoApp (line 73) | func TestEmbeddingGzipFilesIntoApp(t *testing.T) {
FILE: _examples/file-server/favicon/main.go
function main (line 7) | func main() {
FILE: _examples/file-server/file-server/main.go
function init (line 18) | func init() {
constant maxSize (line 23) | maxSize = 1 * iris.GB
constant uploadDir (line 24) | uploadDir = "./uploads"
function main (line 27) | func main() {
function index (line 87) | func index(ctx iris.Context) {
function uploadView (line 91) | func uploadView(ctx iris.Context) {
function upload (line 103) | func upload(ctx iris.Context) {
function beforeSave (line 115) | func beforeSave(ctx iris.Context, file *multipart.FileHeader) bool {
function deleteFile (line 124) | func deleteFile(ctx iris.Context) {
FILE: _examples/file-server/http2push-embedded-gzipped/bindata.go
function bindataRead (line 29) | func bindataRead(data, name string) ([]byte, error) {
type asset (line 49) | type asset struct
type bindataFileInfo (line 54) | type bindataFileInfo struct
method Name (line 62) | func (fi bindataFileInfo) Name() string {
method Size (line 67) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 72) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 77) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 82) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 87) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 91) | type assetFile struct
method Close (line 135) | func (f *assetFile) Close() error {
method Readdir (line 140) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 156) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 98) | type assetOperator struct
method Open (line 101) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 164) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 173) | func AssetFile() http.FileSystem {
function app2App2app3CssMainCssBytes (line 179) | func app2App2app3CssMainCssBytes() ([]byte, error) {
function app2App2app3CssMainCss (line 186) | func app2App2app3CssMainCss() (*asset, error) {
function app2App2app3DirsDir1TextTxtBytes (line 199) | func app2App2app3DirsDir1TextTxtBytes() ([]byte, error) {
function app2App2app3DirsDir1TextTxt (line 206) | func app2App2app3DirsDir1TextTxt() (*asset, error) {
function app2App2app3DirsDir2TextTxtBytes (line 219) | func app2App2app3DirsDir2TextTxtBytes() ([]byte, error) {
function app2App2app3DirsDir2TextTxt (line 226) | func app2App2app3DirsDir2TextTxt() (*asset, error) {
function app2App2app3DirsTextTxtBytes (line 239) | func app2App2app3DirsTextTxtBytes() ([]byte, error) {
function app2App2app3DirsTextTxt (line 246) | func app2App2app3DirsTextTxt() (*asset, error) {
function app2App2app3IndexHtmlBytes (line 259) | func app2App2app3IndexHtmlBytes() ([]byte, error) {
function app2App2app3IndexHtml (line 266) | func app2App2app3IndexHtml() (*asset, error) {
function app2IndexHtmlBytes (line 279) | func app2IndexHtmlBytes() ([]byte, error) {
function app2IndexHtml (line 286) | func app2IndexHtml() (*asset, error) {
function app2MydirTextTxtBytes (line 299) | func app2MydirTextTxtBytes() ([]byte, error) {
function app2MydirTextTxt (line 306) | func app2MydirTextTxt() (*asset, error) {
function cssMainCssBytes (line 319) | func cssMainCssBytes() ([]byte, error) {
function cssMainCss (line 326) | func cssMainCss() (*asset, error) {
function faviconIcoBytes (line 339) | func faviconIcoBytes() ([]byte, error) {
function faviconIco (line 346) | func faviconIco() (*asset, error) {
function indexHtmlBytes (line 359) | func indexHtmlBytes() ([]byte, error) {
function indexHtml (line 366) | func indexHtml() (*asset, error) {
function jsMainJsBytes (line 379) | func jsMainJsBytes() ([]byte, error) {
function jsMainJs (line 386) | func jsMainJs() (*asset, error) {
function Asset (line 400) | func Asset(name string) ([]byte, error) {
function MustAsset (line 414) | func MustAsset(name string) []byte {
function AssetInfo (line 426) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 439) | func AssetNames() []string {
function AssetDir (line 477) | func AssetDir(name string) ([]string, error) {
type bintree (line 499) | type bintree struct
function RestoreAsset (line 537) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 562) | func RestoreAssets(dir, name string) error {
function _filePath (line 578) | func _filePath(dir, name string) string {
FILE: _examples/file-server/http2push-embedded-gzipped/main.go
function main (line 32) | func main() {
FILE: _examples/file-server/http2push-embedded/bindata.go
function bindataRead (line 29) | func bindataRead(data, name string) ([]byte, error) {
type asset (line 49) | type asset struct
type bindataFileInfo (line 54) | type bindataFileInfo struct
method Name (line 62) | func (fi bindataFileInfo) Name() string {
method Size (line 67) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 72) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 77) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 82) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 87) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 91) | type assetFile struct
method Close (line 135) | func (f *assetFile) Close() error {
method Readdir (line 140) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 156) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 98) | type assetOperator struct
method Open (line 101) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 164) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 173) | func AssetFile() http.FileSystem {
function app2App2app3CssMainCssBytes (line 179) | func app2App2app3CssMainCssBytes() ([]byte, error) {
function app2App2app3CssMainCss (line 186) | func app2App2app3CssMainCss() (*asset, error) {
function app2App2app3DirsDir1TextTxtBytes (line 199) | func app2App2app3DirsDir1TextTxtBytes() ([]byte, error) {
function app2App2app3DirsDir1TextTxt (line 206) | func app2App2app3DirsDir1TextTxt() (*asset, error) {
function app2App2app3DirsDir2TextTxtBytes (line 219) | func app2App2app3DirsDir2TextTxtBytes() ([]byte, error) {
function app2App2app3DirsDir2TextTxt (line 226) | func app2App2app3DirsDir2TextTxt() (*asset, error) {
function app2App2app3DirsTextTxtBytes (line 239) | func app2App2app3DirsTextTxtBytes() ([]byte, error) {
function app2App2app3DirsTextTxt (line 246) | func app2App2app3DirsTextTxt() (*asset, error) {
function app2App2app3IndexHtmlBytes (line 259) | func app2App2app3IndexHtmlBytes() ([]byte, error) {
function app2App2app3IndexHtml (line 266) | func app2App2app3IndexHtml() (*asset, error) {
function app2IndexHtmlBytes (line 279) | func app2IndexHtmlBytes() ([]byte, error) {
function app2IndexHtml (line 286) | func app2IndexHtml() (*asset, error) {
function app2MydirTextTxtBytes (line 299) | func app2MydirTextTxtBytes() ([]byte, error) {
function app2MydirTextTxt (line 306) | func app2MydirTextTxt() (*asset, error) {
function cssMainCssBytes (line 319) | func cssMainCssBytes() ([]byte, error) {
function cssMainCss (line 326) | func cssMainCss() (*asset, error) {
function faviconIcoBytes (line 339) | func faviconIcoBytes() ([]byte, error) {
function faviconIco (line 346) | func faviconIco() (*asset, error) {
function indexHtmlBytes (line 359) | func indexHtmlBytes() ([]byte, error) {
function indexHtml (line 366) | func indexHtml() (*asset, error) {
function jsMainJsBytes (line 379) | func jsMainJsBytes() ([]byte, error) {
function jsMainJs (line 386) | func jsMainJs() (*asset, error) {
function Asset (line 400) | func Asset(name string) ([]byte, error) {
function MustAsset (line 414) | func MustAsset(name string) []byte {
function AssetInfo (line 426) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 439) | func AssetNames() []string {
function AssetDir (line 477) | func AssetDir(name string) ([]string, error) {
type bintree (line 499) | type bintree struct
function RestoreAsset (line 537) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 562) | func RestoreAssets(dir, name string) error {
function _filePath (line 578) | func _filePath(dir, name string) string {
FILE: _examples/file-server/http2push-embedded/main.go
function main (line 28) | func main() {
FILE: _examples/file-server/http2push/assets/js/main.js
function onClick (line 3) | function onClick() {
FILE: _examples/file-server/http2push/main.go
function main (line 39) | func main() {
FILE: _examples/file-server/send-files/main.go
function main (line 7) | func main() {
function download (line 17) | func download(ctx iris.Context) {
function downloadWithRateLimit (line 22) | func downloadWithRateLimit(ctx iris.Context) {
FILE: _examples/file-server/single-page-application/basic/main.go
function newApp (line 5) | func newApp() *iris.Application {
function main (line 16) | func main() {
FILE: _examples/file-server/single-page-application/basic/public/index.js
method ViewComponent (line 16) | ViewComponent () {
method render (line 20) | render (h) { return h(this.ViewComponent) }
FILE: _examples/file-server/single-page-application/embedded-single-page-application-with-other-routes/bindata.go
function bindataRead (line 21) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 41) | type asset struct
type bindataFileInfo (line 46) | type bindataFileInfo struct
method Name (line 54) | func (fi bindataFileInfo) Name() string {
method Size (line 59) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 64) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 69) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 74) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 79) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 83) | type assetFile struct
method Close (line 127) | func (f *assetFile) Close() error {
method Readdir (line 132) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 148) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 90) | type assetOperator struct
method Open (line 93) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 156) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 165) | func AssetFile() http.FileSystem {
function appJsBytes (line 171) | func appJsBytes() ([]byte, error) {
function appJs (line 178) | func appJs() (*asset, error) {
function cssMainCssBytes (line 191) | func cssMainCssBytes() ([]byte, error) {
function cssMainCss (line 198) | func cssMainCss() (*asset, error) {
function indexHtmlBytes (line 211) | func indexHtmlBytes() ([]byte, error) {
function indexHtml (line 218) | func indexHtml() (*asset, error) {
function Asset (line 232) | func Asset(name string) ([]byte, error) {
function MustAsset (line 246) | func MustAsset(name string) []byte {
function AssetInfo (line 258) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 271) | func AssetNames() []string {
function AssetDir (line 301) | func AssetDir(name string) ([]string, error) {
type bintree (line 323) | type bintree struct
function RestoreAsset (line 337) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 362) | func RestoreAssets(dir, name string) error {
function _filePath (line 378) | func _filePath(dir, name string) string {
FILE: _examples/file-server/single-page-application/embedded-single-page-application-with-other-routes/main.go
function newApp (line 9) | func newApp() *iris.Application {
function main (line 39) | func main() {
FILE: _examples/file-server/single-page-application/embedded-single-page-application/bindata.go
function bindataRead (line 23) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 43) | type asset struct
type bindataFileInfo (line 48) | type bindataFileInfo struct
method Name (line 56) | func (fi bindataFileInfo) Name() string {
method Size (line 61) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 66) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 71) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 76) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 81) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 85) | type assetFile struct
method Close (line 129) | func (f *assetFile) Close() error {
method Readdir (line 134) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 150) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 92) | type assetOperator struct
method Open (line 95) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 158) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 167) | func AssetFile() http.FileSystem {
function publicAppJsBytes (line 173) | func publicAppJsBytes() ([]byte, error) {
function publicAppJs (line 180) | func publicAppJs() (*asset, error) {
function publicApp2IndexHtmlBytes (line 193) | func publicApp2IndexHtmlBytes() ([]byte, error) {
function publicApp2IndexHtml (line 200) | func publicApp2IndexHtml() (*asset, error) {
function publicCssMainCssBytes (line 213) | func publicCssMainCssBytes() ([]byte, error) {
function publicCssMainCss (line 220) | func publicCssMainCss() (*asset, error) {
function viewsIndexHtmlBytes (line 233) | func viewsIndexHtmlBytes() ([]byte, error) {
function viewsIndexHtml (line 240) | func viewsIndexHtml() (*asset, error) {
function Asset (line 254) | func Asset(name string) ([]byte, error) {
function MustAsset (line 268) | func MustAsset(name string) []byte {
function AssetInfo (line 280) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 293) | func AssetNames() []string {
function AssetDir (line 324) | func AssetDir(name string) ([]string, error) {
type bintree (line 346) | type bintree struct
function RestoreAsset (line 367) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 392) | func RestoreAssets(dir, name string) error {
function _filePath (line 408) | func _filePath(dir, name string) string {
FILE: _examples/file-server/single-page-application/embedded-single-page-application/main.go
function newApp (line 17) | func newApp() *iris.Application {
function main (line 40) | func main() {
FILE: _examples/file-server/single-page-application/embedded-single-page-application/main_test.go
type resource (line 13) | type resource
method contentType (line 15) | func (r resource) contentType() string {
method String (line 26) | func (r resource) String() string {
method strip (line 30) | func (r resource) strip(strip string) string {
method loadFromBase (line 35) | func (r resource) loadFromBase(dir string) string {
function TestSPAEmbedded (line 64) | func TestSPAEmbedded(t *testing.T) {
FILE: _examples/file-server/spa-vue-router/main.go
function main (line 7) | func main() {
FILE: _examples/file-server/subdomain/main.go
constant addr (line 8) | addr = "example.com:80"
constant subdomain (line 9) | subdomain = "v1"
function newApp (line 12) | func newApp() *iris.Application {
function main (line 26) | func main() {
FILE: _examples/file-server/subdomain/main_test.go
type resource (line 12) | type resource
method contentType (line 14) | func (r resource) contentType() string {
method String (line 29) | func (r resource) String() string {
method loadFromBase (line 33) | func (r resource) loadFromBase(dir string) string {
function TestFileServerSubdomainBasic (line 53) | func TestFileServerSubdomainBasic(t *testing.T) {
FILE: _examples/file-server/upload-file/main.go
constant maxSize (line 14) | maxSize = 5 << 20
function main (line 16) | func main() {
FILE: _examples/file-server/upload-files/main.go
function main (line 15) | func main() {
function newApp (line 21) | func newApp() *iris.Application {
function beforeSave (line 86) | func beforeSave(ctx iris.Context, file *multipart.FileHeader) bool {
FILE: _examples/file-server/upload-files/main_test.go
function TestUploadFiles (line 10) | func TestUploadFiles(t *testing.T) {
FILE: _examples/file-server/webdav/main.go
function main (line 15) | func main() {
FILE: _examples/graphql/schema-first/graph/generated.go
function NewExecutableSchema (line 24) | func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
type Config (line 32) | type Config struct
type ResolverRoot (line 38) | type ResolverRoot interface
type DirectiveRoot (line 43) | type DirectiveRoot struct
type ComplexityRoot (line 46) | type ComplexityRoot struct
type MutationResolver (line 64) | type MutationResolver interface
type QueryResolver (line 67) | type QueryResolver interface
type executableSchema (line 72) | type executableSchema struct
method Schema (line 78) | func (e *executableSchema) Schema() *ast.Schema {
method Complexity (line 82) | func (e *executableSchema) Complexity(typeName, field string, childCom...
method Exec (line 155) | func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseH...
type executionContext (line 200) | type executionContext struct
method introspectSchema (line 205) | func (ec *executionContext) introspectSchema() (*introspection.Schema,...
method introspectType (line 212) | func (ec *executionContext) introspectType(name string) (*introspectio...
method field_Mutation_upsertCharacter_args (line 239) | func (ec *executionContext) field_Mutation_upsertCharacter_args(ctx co...
method field_Query___type_args (line 254) | func (ec *executionContext) field_Query___type_args(ctx context.Contex...
method field_Query_character_args (line 269) | func (ec *executionContext) field_Query_character_args(ctx context.Con...
method field_Query_characters_args (line 284) | func (ec *executionContext) field_Query_characters_args(ctx context.Co...
method field___Type_enumValues_args (line 299) | func (ec *executionContext) field___Type_enumValues_args(ctx context.C...
method field___Type_fields_args (line 314) | func (ec *executionContext) field___Type_fields_args(ctx context.Conte...
method _Character_id (line 337) | func (ec *executionContext) _Character_id(ctx context.Context, field g...
method fieldContext_Character_id (line 368) | func (ec *executionContext) fieldContext_Character_id(ctx context.Cont...
method _Character_name (line 381) | func (ec *executionContext) _Character_name(ctx context.Context, field...
method fieldContext_Character_name (line 412) | func (ec *executionContext) fieldContext_Character_name(ctx context.Co...
method _Character_isHero (line 425) | func (ec *executionContext) _Character_isHero(ctx context.Context, fie...
method fieldContext_Character_isHero (line 456) | func (ec *executionContext) fieldContext_Character_isHero(ctx context....
method _Character_cliqueType (line 469) | func (ec *executionContext) _Character_cliqueType(ctx context.Context,...
method fieldContext_Character_cliqueType (line 500) | func (ec *executionContext) fieldContext_Character_cliqueType(ctx cont...
method _Mutation_upsertCharacter (line 513) | func (ec *executionContext) _Mutation_upsertCharacter(ctx context.Cont...
method fieldContext_Mutation_upsertCharacter (line 543) | func (ec *executionContext) fieldContext_Mutation_upsertCharacter(ctx ...
method _Query_character (line 577) | func (ec *executionContext) _Query_character(ctx context.Context, fiel...
method fieldContext_Query_character (line 604) | func (ec *executionContext) fieldContext_Query_character(ctx context.C...
method _Query_characters (line 638) | func (ec *executionContext) _Query_characters(ctx context.Context, fie...
method fieldContext_Query_characters (line 665) | func (ec *executionContext) fieldContext_Query_characters(ctx context....
method _Query___type (line 699) | func (ec *executionContext) _Query___type(ctx context.Context, field g...
method fieldContext_Query___type (line 726) | func (ec *executionContext) fieldContext_Query___type(ctx context.Cont...
method _Query___schema (line 772) | func (ec *executionContext) _Query___schema(ctx context.Context, field...
method fieldContext_Query___schema (line 799) | func (ec *executionContext) fieldContext_Query___schema(ctx context.Co...
method ___Directive_name (line 826) | func (ec *executionContext) ___Directive_name(ctx context.Context, fie...
method fieldContext___Directive_name (line 857) | func (ec *executionContext) fieldContext___Directive_name(ctx context....
method ___Directive_description (line 870) | func (ec *executionContext) ___Directive_description(ctx context.Conte...
method fieldContext___Directive_description (line 898) | func (ec *executionContext) fieldContext___Directive_description(ctx c...
method ___Directive_locations (line 911) | func (ec *executionContext) ___Directive_locations(ctx context.Context...
method fieldContext___Directive_locations (line 942) | func (ec *executionContext) fieldContext___Directive_locations(ctx con...
method ___Directive_args (line 955) | func (ec *executionContext) ___Directive_args(ctx context.Context, fie...
method fieldContext___Directive_args (line 986) | func (ec *executionContext) fieldContext___Directive_args(ctx context....
method ___Directive_isRepeatable (line 1009) | func (ec *executionContext) ___Directive_isRepeatable(ctx context.Cont...
method fieldContext___Directive_isRepeatable (line 1040) | func (ec *executionContext) fieldContext___Directive_isRepeatable(ctx ...
method ___EnumValue_name (line 1053) | func (ec *executionContext) ___EnumValue_name(ctx context.Context, fie...
method fieldContext___EnumValue_name (line 1084) | func (ec *executionContext) fieldContext___EnumValue_name(ctx context....
method ___EnumValue_description (line 1097) | func (ec *executionContext) ___EnumValue_description(ctx context.Conte...
method fieldContext___EnumValue_description (line 1125) | func (ec *executionContext) fieldContext___EnumValue_description(ctx c...
method ___EnumValue_isDeprecated (line 1138) | func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Cont...
method fieldContext___EnumValue_isDeprecated (line 1169) | func (ec *executionContext) fieldContext___EnumValue_isDeprecated(ctx ...
method ___EnumValue_deprecationReason (line 1182) | func (ec *executionContext) ___EnumValue_deprecationReason(ctx context...
method fieldContext___EnumValue_deprecationReason (line 1210) | func (ec *executionContext) fieldContext___EnumValue_deprecationReason...
method ___Field_name (line 1223) | func (ec *executionContext) ___Field_name(ctx context.Context, field g...
method fieldContext___Field_name (line 1254) | func (ec *executionContext) fieldContext___Field_name(ctx context.Cont...
method ___Field_description (line 1267) | func (ec *executionContext) ___Field_description(ctx context.Context, ...
method fieldContext___Field_description (line 1295) | func (ec *executionContext) fieldContext___Field_description(ctx conte...
method ___Field_args (line 1308) | func (ec *executionContext) ___Field_args(ctx context.Context, field g...
method fieldContext___Field_args (line 1339) | func (ec *executionContext) fieldContext___Field_args(ctx context.Cont...
method ___Field_type (line 1362) | func (ec *executionContext) ___Field_type(ctx context.Context, field g...
method fieldContext___Field_type (line 1393) | func (ec *executionContext) fieldContext___Field_type(ctx context.Cont...
method ___Field_isDeprecated (line 1428) | func (ec *executionContext) ___Field_isDeprecated(ctx context.Context,...
method fieldContext___Field_isDeprecated (line 1459) | func (ec *executionContext) fieldContext___Field_isDeprecated(ctx cont...
method ___Field_deprecationReason (line 1472) | func (ec *executionContext) ___Field_deprecationReason(ctx context.Con...
method fieldContext___Field_deprecationReason (line 1500) | func (ec *executionContext) fieldContext___Field_deprecationReason(ctx...
method ___InputValue_name (line 1513) | func (ec *executionContext) ___InputValue_name(ctx context.Context, fi...
method fieldContext___InputValue_name (line 1544) | func (ec *executionContext) fieldContext___InputValue_name(ctx context...
method ___InputValue_description (line 1557) | func (ec *executionContext) ___InputValue_description(ctx context.Cont...
method fieldContext___InputValue_description (line 1585) | func (ec *executionContext) fieldContext___InputValue_description(ctx ...
method ___InputValue_type (line 1598) | func (ec *executionContext) ___InputValue_type(ctx context.Context, fi...
method fieldContext___InputValue_type (line 1629) | func (ec *executionContext) fieldContext___InputValue_type(ctx context...
method ___InputValue_defaultValue (line 1664) | func (ec *executionContext) ___InputValue_defaultValue(ctx context.Con...
method fieldContext___InputValue_defaultValue (line 1692) | func (ec *executionContext) fieldContext___InputValue_defaultValue(ctx...
method ___Schema_description (line 1705) | func (ec *executionContext) ___Schema_description(ctx context.Context,...
method fieldContext___Schema_description (line 1733) | func (ec *executionContext) fieldContext___Schema_description(ctx cont...
method ___Schema_types (line 1746) | func (ec *executionContext) ___Schema_types(ctx context.Context, field...
method fieldContext___Schema_types (line 1777) | func (ec *executionContext) fieldContext___Schema_types(ctx context.Co...
method ___Schema_queryType (line 1812) | func (ec *executionContext) ___Schema_queryType(ctx context.Context, f...
method fieldContext___Schema_queryType (line 1843) | func (ec *executionContext) fieldContext___Schema_queryType(ctx contex...
method ___Schema_mutationType (line 1878) | func (ec *executionContext) ___Schema_mutationType(ctx context.Context...
method fieldContext___Schema_mutationType (line 1906) | func (ec *executionContext) fieldContext___Schema_mutationType(ctx con...
method ___Schema_subscriptionType (line 1941) | func (ec *executionContext) ___Schema_subscriptionType(ctx context.Con...
method fieldContext___Schema_subscriptionType (line 1969) | func (ec *executionContext) fieldContext___Schema_subscriptionType(ctx...
method ___Schema_directives (line 2004) | func (ec *executionContext) ___Schema_directives(ctx context.Context, ...
method fieldContext___Schema_directives (line 2035) | func (ec *executionContext) fieldContext___Schema_directives(ctx conte...
method ___Type_kind (line 2060) | func (ec *executionContext) ___Type_kind(ctx context.Context, field gr...
method fieldContext___Type_kind (line 2091) | func (ec *executionContext) fieldContext___Type_kind(ctx context.Conte...
method ___Type_name (line 2104) | func (ec *executionContext) ___Type_name(ctx context.Context, field gr...
method fieldContext___Type_name (line 2132) | func (ec *executionContext) fieldContext___Type_name(ctx context.Conte...
method ___Type_description (line 2145) | func (ec *executionContext) ___Type_description(ctx context.Context, f...
method fieldContext___Type_description (line 2173) | func (ec *executionContext) fieldContext___Type_description(ctx contex...
method ___Type_fields (line 2186) | func (ec *executionContext) ___Type_fields(ctx context.Context, field ...
method fieldContext___Type_fields (line 2214) | func (ec *executionContext) fieldContext___Type_fields(ctx context.Con...
method ___Type_interfaces (line 2252) | func (ec *executionContext) ___Type_interfaces(ctx context.Context, fi...
method fieldContext___Type_interfaces (line 2280) | func (ec *executionContext) fieldContext___Type_interfaces(ctx context...
method ___Type_possibleTypes (line 2315) | func (ec *executionContext) ___Type_possibleTypes(ctx context.Context,...
method fieldContext___Type_possibleTypes (line 2343) | func (ec *executionContext) fieldContext___Type_possibleTypes(ctx cont...
method ___Type_enumValues (line 2378) | func (ec *executionContext) ___Type_enumValues(ctx context.Context, fi...
method fieldContext___Type_enumValues (line 2406) | func (ec *executionContext) fieldContext___Type_enumValues(ctx context...
method ___Type_inputFields (line 2440) | func (ec *executionContext) ___Type_inputFields(ctx context.Context, f...
method fieldContext___Type_inputFields (line 2468) | func (ec *executionContext) fieldContext___Type_inputFields(ctx contex...
method ___Type_ofType (line 2491) | func (ec *executionContext) ___Type_ofType(ctx context.Context, field ...
method fieldContext___Type_ofType (line 2519) | func (ec *executionContext) fieldContext___Type_ofType(ctx context.Con...
method ___Type_specifiedByURL (line 2554) | func (ec *executionContext) ___Type_specifiedByURL(ctx context.Context...
method fieldContext___Type_specifiedByURL (line 2582) | func (ec *executionContext) fieldContext___Type_specifiedByURL(ctx con...
method unmarshalInputCharacterInput (line 2599) | func (ec *executionContext) unmarshalInputCharacterInput(ctx context.C...
method _Character (line 2661) | func (ec *executionContext) _Character(ctx context.Context, sel ast.Se...
method _Mutation (line 2710) | func (ec *executionContext) _Mutation(ctx context.Context, sel ast.Sel...
method _Query (line 2742) | func (ec *executionContext) _Query(ctx context.Context, sel ast.Select...
method ___Directive (line 2820) | func (ec *executionContext) ___Directive(ctx context.Context, sel ast....
method ___EnumValue (line 2873) | func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast....
method ___Field (line 2916) | func (ec *executionContext) ___Field(ctx context.Context, sel ast.Sele...
method ___InputValue (line 2973) | func (ec *executionContext) ___InputValue(ctx context.Context, sel ast...
method ___Schema (line 3016) | func (ec *executionContext) ___Schema(ctx context.Context, sel ast.Sel...
method ___Type (line 3070) | func (ec *executionContext) ___Type(ctx context.Context, sel ast.Selec...
method unmarshalNBoolean2bool (line 3136) | func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context...
method marshalNBoolean2bool (line 3141) | func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, ...
method marshalNCharacter2githubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCharacter (line 3151) | func (ec *executionContext) marshalNCharacter2githubᚗcomᚋirisᚑcontribᚋ...
method marshalNCharacter2ᚖgithubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCharacter (line 3155) | func (ec *executionContext) marshalNCharacter2ᚖgithubᚗcomᚋirisᚑcontrib...
method unmarshalNCharacterInput2githubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCharacterInput (line 3165) | func (ec *executionContext) unmarshalNCharacterInput2githubᚗcomᚋirisᚑc...
method unmarshalNCliqueType2githubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCliqueType (line 3170) | func (ec *executionContext) unmarshalNCliqueType2githubᚗcomᚋirisᚑcontr...
method marshalNCliqueType2githubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCliqueType (line 3176) | func (ec *executionContext) marshalNCliqueType2githubᚗcomᚋirisᚑcontrib...
method unmarshalNID2string (line 3180) | func (ec *executionContext) unmarshalNID2string(ctx context.Context, v...
method marshalNID2string (line 3185) | func (ec *executionContext) marshalNID2string(ctx context.Context, sel...
method unmarshalNString2string (line 3195) | func (ec *executionContext) unmarshalNString2string(ctx context.Contex...
method marshalNString2string (line 3200) | func (ec *executionContext) marshalNString2string(ctx context.Context,...
method marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective (line 3210) | func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋg...
method marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ (line 3214) | func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋ...
method unmarshalN__DirectiveLocation2string (line 3258) | func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx c...
method marshalN__DirectiveLocation2string (line 3263) | func (ec *executionContext) marshalN__DirectiveLocation2string(ctx con...
method unmarshalN__DirectiveLocation2ᚕstringᚄ (line 3273) | func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx...
method marshalN__DirectiveLocation2ᚕstringᚄ (line 3290) | func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx c...
method marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue (line 3334) | func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋg...
method marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField (line 3338) | func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlge...
method marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue (line 3342) | func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋ...
method marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ (line 3346) | func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designs...
method marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType (line 3390) | func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgen...
method marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ (line 3394) | func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlge...
method marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType (line 3438) | func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlge...
method unmarshalN__TypeKind2string (line 3448) | func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Co...
method marshalN__TypeKind2string (line 3453) | func (ec *executionContext) marshalN__TypeKind2string(ctx context.Cont...
method unmarshalOBoolean2bool (line 3463) | func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context...
method marshalOBoolean2bool (line 3468) | func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, ...
method unmarshalOBoolean2ᚖbool (line 3473) | func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Contex...
method marshalOBoolean2ᚖbool (line 3481) | func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context,...
method marshalOCharacter2ᚕᚖgithubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCharacterᚄ (line 3489) | func (ec *executionContext) marshalOCharacter2ᚕᚖgithubᚗcomᚋirisᚑcontri...
method marshalOCharacter2ᚖgithubᚗcomᚋirisᚑcontribᚋouterbanksᚑapiᚋgraphᚋgraphᚋmodelᚐCharacter (line 3536) | func (ec *executionContext) marshalOCharacter2ᚖgithubᚗcomᚋirisᚑcontrib...
method unmarshalOString2ᚖstring (line 3543) | func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Conte...
method marshalOString2ᚖstring (line 3551) | func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context...
method marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ (line 3559) | func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋ...
method marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ (line 3606) | func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlg...
method marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ (line 3653) | func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designs...
method marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema (line 3700) | func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgql...
method marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ (line 3707) | func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlge...
method marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType (line 3754) | func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlge...
function sourceData (line 222) | func sourceData(filename string) string {
FILE: _examples/graphql/schema-first/graph/model/models_gen.go
type Character (line 11) | type Character struct
type CharacterInput (line 18) | type CharacterInput struct
type CliqueType (line 25) | type CliqueType
method IsValid (line 39) | func (e CliqueType) IsValid() bool {
method String (line 47) | func (e CliqueType) String() string {
method UnmarshalGQL (line 51) | func (e *CliqueType) UnmarshalGQL(v any) error {
method MarshalGQL (line 64) | func (e CliqueType) MarshalGQL(w io.Writer) {
constant CliqueTypeKooks (line 29) | CliqueTypeKooks CliqueType = "KOOKS"
constant CliqueTypePogues (line 31) | CliqueTypePogues CliqueType = "POGUES"
FILE: _examples/graphql/schema-first/graph/resolver.go
type Resolver (line 9) | type Resolver struct
FILE: _examples/graphql/schema-first/graph/schema.resolvers.go
method Mutation (line 71) | func (r *Resolver) Mutation() MutationResolver { return &mutationResolve...
method Query (line 74) | func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
type mutationResolver (line 76) | type mutationResolver struct
method UpsertCharacter (line 14) | func (r *mutationResolver) UpsertCharacter(ctx context.Context, input ...
type queryResolver (line 77) | type queryResolver struct
method Character (line 49) | func (r *queryResolver) Character(ctx context.Context, id string) (*mo...
method Characters (line 57) | func (r *queryResolver) Characters(ctx context.Context, cliqueType mod...
FILE: _examples/graphql/schema-first/server.go
function main (line 13) | func main() {
FILE: _examples/http-client/weatherapi/client/client.go
constant BaseURL (line 12) | BaseURL = "https://api.weatherapi.com/v1"
type Options (line 15) | type Options struct
type Client (line 19) | type Client struct
method GetCurrentByCity (line 36) | func (c *Client) GetCurrentByCity(ctx context.Context, city string) (r...
function NewClient (line 24) | func NewClient(opts Options) *Client {
FILE: _examples/http-client/weatherapi/client/response.go
type Response (line 3) | type Response struct
FILE: _examples/http-client/weatherapi/main.go
function main (line 10) | func main() {
FILE: _examples/http-server/custom-httpserver/easy-way/main.go
function main (line 9) | func main() {
FILE: _examples/http-server/custom-httpserver/multi/main.go
function main (line 9) | func main() {
FILE: _examples/http-server/custom-httpserver/std-way/main.go
function main (line 9) | func main() {
FILE: _examples/http-server/custom-listener/main.go
function main (line 9) | func main() {
FILE: _examples/http-server/graceful-shutdown/custom-notifier/main.go
function main (line 13) | func main() {
FILE: _examples/http-server/graceful-shutdown/default-notifier/main.go
function main (line 17) | func main() {
FILE: _examples/http-server/h2c/main.go
function main (line 24) | func main() {
function index (line 50) | func index(ctx iris.Context) {
FILE: _examples/http-server/http3-quic/main.go
function main (line 13) | func main() {
FILE: _examples/http-server/iris-configurator-and-host-configurator/main.go
function main (line 7) | func main() {
FILE: _examples/http-server/listen-addr-public/main.go
function main (line 5) | func main() {
FILE: _examples/http-server/listen-addr/main.go
function main (line 5) | func main() {
FILE: _examples/http-server/listen-addr/omit-server-errors/main.go
function main (line 7) | func main() {
FILE: _examples/http-server/listen-addr/omit-server-errors/main_test.go
function logger (line 13) | func logger(app *iris.Application) *bytes.Buffer {
function TestListenAddr (line 24) | func TestListenAddr(t *testing.T) {
function TestListenAddrWithoutServerErr (line 50) | func TestListenAddrWithoutServerErr(t *testing.T) {
FILE: _examples/http-server/listen-letsencrypt/main.go
function main (line 8) | func main() {
FILE: _examples/http-server/listen-tls/main.go
function main (line 7) | func main() {
FILE: _examples/http-server/listen-unix/main.go
function main (line 8) | func main() {
FILE: _examples/http-server/notify-on-shutdown/main.go
function main (line 10) | func main() {
function onServerShutdown (line 47) | func onServerShutdown() {
function configureHost (line 51) | func configureHost(su *iris.Supervisor) {
FILE: _examples/http-server/socket-sharding/main.go
function main (line 9) | func main() {
FILE: _examples/http-server/timeout/main.go
function main (line 10) | func main() {
type worker (line 22) | type worker struct
method Work (line 24) | func (w *worker) Work(ctx context.Context) string {
FILE: _examples/i18n/basic/main.go
function newApp (line 14) | func newApp() *iris.Application {
function main (line 104) | func main() {
FILE: _examples/i18n/basic/main_test.go
function TestI18n (line 11) | func TestI18n(t *testing.T) {
FILE: _examples/i18n/plurals/main.go
constant female (line 10) | female = iota + 1
constant male (line 11) | male
constant tableStyle (line 14) | tableStyle = `
function main (line 81) | func main() {
function tr (line 172) | func tr(ctx iris.Context, key string, args ...any) {
FILE: _examples/i18n/plurals/main_test.go
constant female (line 12) | female = iota + 1
constant male (line 13) | male
function TestI18nPlurals (line 16) | func TestI18nPlurals(t *testing.T) {
function tr (line 128) | func tr(ctx iris.Context, key string, args ...any) {
FILE: _examples/i18n/template-embedded/main.go
function main (line 14) | func main() {
function newApp (line 29) | func newApp() *iris.Application {
FILE: _examples/i18n/template-embedded/main_test.go
function TestI18nLoaderFuncMap (line 9) | func TestI18nLoaderFuncMap(t *testing.T) {
FILE: _examples/i18n/template/main.go
function main (line 15) | func main() {
function newApp (line 20) | func newApp() *iris.Application {
FILE: _examples/i18n/template/main_test.go
function TestI18nLoaderFuncMap (line 9) | func TestI18nLoaderFuncMap(t *testing.T) {
FILE: _examples/kafka-api/main.go
function getenv (line 40) | func getenv(key string, def string) string {
function init (line 48) | func init() {
function main (line 67) | func main() {
function docsHandler (line 94) | func docsHandler(ctx iris.Context) {
type httpError (line 138) | type httpError struct
method Error (line 143) | func (h httpError) Error() string {
function fail (line 147) | func fail(ctx iris.Context, statusCode int, format string, a ...any) {
function handleNotFound (line 161) | func handleNotFound(ctx iris.Context) {
type Topic (line 176) | type Topic struct
type kv (line 183) | type kv struct
function createKafkaTopic (line 188) | func createKafkaTopic(t Topic) error {
function postTopicsHandler (line 211) | func postTopicsHandler(ctx iris.Context) {
function getKafkaTopics (line 232) | func getKafkaTopics() ([]string, error) {
function getTopicsHandler (line 242) | func getTopicsHandler(ctx iris.Context) {
function produceKafkaMessage (line 253) | func produceKafkaMessage(toTopic string, key string, value []byte) (part...
function postTopicProduceHandler (line 274) | func postTopicProduceHandler(ctx iris.Context) {
type message (line 296) | type message struct
function getTopicConsumeSSEHandler (line 304) | func getTopicConsumeSSEHandler(ctx iris.Context) {
FILE: _examples/logging/file-logger/main.go
function main (line 10) | func main() {
function todayFilename (line 34) | func todayFilename() string {
function newLogFile (line 39) | func newLogFile() *os.File {
FILE: _examples/logging/json-logger/main.go
function main (line 10) | func main() {
function ping (line 60) | func ping(ctx iris.Context) {
FILE: _examples/logging/json-logger/main_test.go
function TestJSONLogger (line 18) | func TestJSONLogger(t *testing.T) {
function getSourceDirPath (line 65) | func getSourceDirPath() string {
FILE: _examples/logging/request-logger/accesslog-broker/main.go
function main (line 12) | func main() {
function notFoundHandler (line 55) | func notFoundHandler(ctx iris.Context) {
function indexHandler (line 71) | func indexHandler(ctx iris.Context) {
function profileHandler (line 75) | func profileHandler(ctx iris.Context) {
function readBodyHandler (line 80) | func readBodyHandler(ctx iris.Context) {
function testPanic (line 90) | func testPanic(ctx iris.Context) {
function logsHandler (line 94) | func logsHandler(b *accesslog.Broker) iris.Handler {
FILE: _examples/logging/request-logger/accesslog-csv/main.go
function main (line 10) | func main() {
function index (line 26) | func index(ctx iris.Context) {
FILE: _examples/logging/request-logger/accesslog-formatter/main.go
function logFields (line 18) | func logFields(ctx iris.Context, fields *accesslog.Fields) {
function main (line 22) | func main() {
function notFound (line 42) | func notFound(ctx iris.Context) {
function index (line 46) | func index(ctx iris.Context) {
type customFormatter (line 50) | type customFormatter struct
method SetOutput (line 64) | func (f *customFormatter) SetOutput(dest io.Writer) {
method Format (line 79) | func (f *customFormatter) Format(log *accesslog.Log) (bool, error) {
method writeTextOrBlank (line 113) | func (f *customFormatter) writeTextOrBlank(buf *bytes.Buffer, s string) {
function newCustomFormatter (line 60) | func newCustomFormatter(delim byte, blank string) *customFormatter {
constant newLine (line 77) | newLine = '\n'
function uniformDuration (line 127) | func uniformDuration(t time.Duration) string {
FILE: _examples/logging/request-logger/accesslog-proxy/main.go
function main (line 21) | func main() {
function index (line 77) | func index(ctx iris.Context) {
function newProxyHandler (line 81) | func newProxyHandler(proxyURL string) iris.Handler {
FILE: _examples/logging/request-logger/accesslog-proxy/target/main.go
function main (line 6) | func main() {
function readWriteHandler (line 19) | func readWriteHandler(ctx iris.Context) {
function getHandler (line 29) | func getHandler(ctx iris.Context) {
FILE: _examples/logging/request-logger/accesslog-simple/main.go
function makeAccessLog (line 9) | func makeAccessLog() *accesslog.AccessLog {
function main (line 42) | func main() {
function indexHandler (line 55) | func indexHandler(ctx iris.Context) {
FILE: _examples/logging/request-logger/accesslog-slack/main.go
function main (line 19) | func main() {
function index (line 36) | func index(ctx iris.Context) {
FILE: _examples/logging/request-logger/accesslog-slack/slack_formatter.go
type Slack (line 11) | type Slack struct
method SetOutput (line 35) | func (f *Slack) SetOutput(dest io.Writer) {
method Format (line 56) | func (f *Slack) Format(log *accesslog.Log) (bool, error) {
FILE: _examples/logging/request-logger/accesslog-template/main.go
function main (line 9) | func main() {
function index (line 42) | func index(ctx iris.Context) {
FILE: _examples/logging/request-logger/accesslog/main.go
function makeAccessLog (line 21) | func makeAccessLog() *accesslog.AccessLog {
function main (line 99) | func main() {
function readBodyHandler (line 132) | func readBodyHandler(ctx iris.Context) {
function userHandler (line 142) | func userHandler(ctx iris.Context) {
function htmlResponse (line 146) | func htmlResponse(ctx iris.Context) {
function adminHandler (line 150) | func adminHandler(ctx iris.Context) {
function sessionHandler (line 156) | func sessionHandler(ctx iris.Context) {
type user (line 163) | type user struct
method String (line 169) | func (u user) String() string {
function fieldsHandler (line 173) | func fieldsHandler(ctx iris.Context) {
FILE: _examples/logging/rollbar/main.go
function init (line 17) | func init() {
function main (line 37) | func main() {
function index (line 99) | func index(ctx iris.Context) {
function panicMe (line 105) | func panicMe(ctx iris.Context) {
FILE: _examples/monitor/monitor-middleware/main.go
function main (line 11) | func main() {
function handler (line 62) | func handler(ctx iris.Context) {
FILE: _examples/monitor/statsviz/main.go
function main (line 13) | func main() {
function index (line 38) | func index(ctx iris.Context) {
FILE: _examples/mvc/authenticated-controller/main.go
function main (line 17) | func main() {
function newApp (line 30) | func newApp() *iris.Application {
type Authenticated (line 60) | type Authenticated
function authDependency (line 62) | func authDependency(ctx iris.Context, session *sessions.Session) Authent...
type UnauthenticatedUserController (line 85) | type UnauthenticatedUserController struct
method Get (line 89) | func (c *UnauthenticatedUserController) Get() string {
method PostLogin (line 95) | func (c *UnauthenticatedUserController) PostLogin(session *sessions.Se...
type UserController (line 106) | type UserController struct
method Get (line 112) | func (c *UserController) Get() string {
method PostLogout (line 119) | func (c *UserController) PostLogout(ctx iris.Context) {
FILE: _examples/mvc/authenticated-controller/main_test.go
function TestMVCOverlapping (line 9) | func TestMVCOverlapping(t *testing.T) {
FILE: _examples/mvc/basic/main.go
function main (line 14) | func main() {
function basicMVC (line 33) | func basicMVC(app *mvc.Application) {
type LoggerService (line 73) | type LoggerService interface
type prefixedLogger (line 77) | type prefixedLogger struct
method Log (line 81) | func (s *prefixedLogger) Log(msg string) {
type basicController (line 85) | type basicController struct
method BeforeActivation (line 91) | func (c *basicController) BeforeActivation(b mvc.BeforeActivation) {
method AfterActivation (line 95) | func (c *basicController) AfterActivation(a mvc.AfterActivation) {
method Get (line 101) | func (c *basicController) Get() string {
method Custom (line 110) | func (c *basicController) Custom() string {
type basicSubController (line 114) | type basicSubController struct
method Get (line 118) | func (c *basicSubController) Get() string {
FILE: _examples/mvc/basic/wildcard/main.go
function main (line 8) | func main() {
type myController (line 31) | type myController struct
method GetByWildcard (line 37) | func (c *myController) GetByWildcard(wildcardPathParameter string) res...
type response (line 33) | type response struct
FILE: _examples/mvc/error-handler-custom-result/main.go
function main (line 8) | func main() {
type errorResponse (line 18) | type errorResponse struct
method Dispatch (line 33) | func (e errorResponse) Dispatch(ctx iris.Context) {
type controller (line 58) | type controller struct
method GetBy (line 64) | func (c *controller) GetBy(userid uint64) mvc.Result {
type user (line 60) | type user struct
FILE: _examples/mvc/error-handler-hijack/main.go
function main (line 8) | func main() {
function errorView (line 31) | func errorView(e errorResponse) mvc.Result {
type errorResponse (line 40) | type errorResponse struct
type controller (line 45) | type controller struct
method GetBy (line 51) | func (c *controller) GetBy(userid uint64) any {
type user (line 47) | type user struct
FILE: _examples/mvc/error-handler-http/main.go
function main (line 10) | func main() {
function newApp (line 16) | func newApp() *iris.Application {
type controller (line 26) | type controller struct
method Get (line 28) | func (c *controller) Get() string {
method GetError (line 32) | func (c *controller) GetError() mvc.Result {
method HandleHTTPError (line 52) | func (c *controller) HandleHTTPError(statusCode mvc.Code, err mvc.Err)...
FILE: _examples/mvc/error-handler-http/main_test.go
function TestControllerHandleHTTPError (line 9) | func TestControllerHandleHTTPError(t *testing.T) {
FILE: _examples/mvc/error-handler-preflight/main.go
function main (line 11) | func main() {
type controller (line 21) | type controller struct
method GetBy (line 67) | func (c *controller) GetBy(userid uint64) *response {
type response (line 24) | type response struct
method Preflight (line 32) | func (r *response) Preflight(ctx iris.Context) error {
type user (line 63) | type user struct
FILE: _examples/mvc/error-handler/main.go
function main (line 11) | func main() {
type myController (line 29) | type myController struct
method HandleError (line 33) | func (c *myController) HandleError(ctx iris.Context, err error) {
method Get (line 37) | func (c *myController) Get() error {
FILE: _examples/mvc/grpc-compatible-bidirectional-stream/client/main.go
function main (line 13) | func main() {
FILE: _examples/mvc/grpc-compatible-bidirectional-stream/helloworld/helloworld.pb.go
constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
constant _ (line 26) | _ = proto.ProtoPackageIsVersion4
type HelloRequest (line 29) | type HelloRequest struct
method Reset (line 37) | func (x *HelloRequest) Reset() {
method String (line 46) | func (x *HelloRequest) String() string {
method ProtoMessage (line 50) | func (*HelloRequest) ProtoMessage() {}
method ProtoReflect (line 52) | func (x *HelloRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 65) | func (*HelloRequest) Descriptor() ([]byte, []int) {
method GetName (line 69) | func (x *HelloRequest) GetName() string {
type HelloReply (line 77) | type HelloReply struct
method Reset (line 85) | func (x *HelloReply) Reset() {
method String (line 94) | func (x *HelloReply) String() string {
method ProtoMessage (line 98) | func (*HelloReply) ProtoMessage() {}
method ProtoReflect (line 100) | func (x *HelloReply) ProtoReflect() protoreflect.Message {
method Descriptor (line 113) | func (*HelloReply) Descriptor() ([]byte, []int) {
method GetMessage (line 117) | func (x *HelloReply) GetMessage() string {
function file_helloworld_proto_rawDescGZIP (line 165) | func file_helloworld_proto_rawDescGZIP() []byte {
function init (line 193) | func init() { file_helloworld_proto_init() }
function file_helloworld_proto_init (line 194) | func file_helloworld_proto_init() {
FILE: _examples/mvc/grpc-compatible-bidirectional-stream/helloworld/helloworld_grpc.pb.go
constant _ (line 14) | _ = grpc.SupportPackageIsVersion7
type GreeterClient (line 19) | type GreeterClient interface
type greeterClient (line 24) | type greeterClient struct
method SayHello (line 32) | func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest...
function NewGreeterClient (line 28) | func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
type GreeterServer (line 44) | type GreeterServer interface
type UnimplementedGreeterServer (line 51) | type UnimplementedGreeterServer struct
method SayHello (line 54) | func (UnimplementedGreeterServer) SayHello(context.Context, *HelloRequ...
method mustEmbedUnimplementedGreeterServer (line 57) | func (UnimplementedGreeterServer) mustEmbedUnimplementedGreeterServer(...
type UnsafeGreeterServer (line 62) | type UnsafeGreeterServer interface
function RegisterGreeterServer (line 66) | func RegisterGreeterServer(s grpc.ServiceRegistrar, srv GreeterServer) {
function _Greeter_SayHello_Handler (line 70) | func _Greeter_SayHello_Handler(srv any, ctx context.Context, dec func(an...
type GreeterServerSideSStreamClient (line 104) | type GreeterServerSideSStreamClient interface
type greeterServerSideSStreamClient (line 109) | type greeterServerSideSStreamClient struct
method SayHello (line 117) | func (c *greeterServerSideSStreamClient) SayHello(ctx context.Context,...
function NewGreeterServerSideSStreamClient (line 113) | func NewGreeterServerSideSStreamClient(cc grpc.ClientConnInterface) Gree...
type GreeterServerSideSStream_SayHelloClient (line 132) | type GreeterServerSideSStream_SayHelloClient interface
type greeterServerSideSStreamSayHelloClient (line 137) | type greeterServerSideSStreamSayHelloClient struct
method Recv (line 141) | func (x *greeterServerSideSStreamSayHelloClient) Recv() (*HelloReply, ...
type GreeterServerSideSStreamServer (line 152) | type GreeterServerSideSStreamServer interface
type UnimplementedGreeterServerSideSStreamServer (line 159) | type UnimplementedGreeterServerSideSStreamServer struct
method SayHello (line 162) | func (UnimplementedGreeterServerSideSStreamServer) SayHello(*HelloRequ...
method mustEmbedUnimplementedGreeterServerSideSStreamServer (line 165) | func (UnimplementedGreeterServerSideSStreamServer) mustEmbedUnimplemen...
type UnsafeGreeterServerSideSStreamServer (line 171) | type UnsafeGreeterServerSideSStreamServer interface
function RegisterGreeterServerSideSStreamServer (line 175) | func RegisterGreeterServerSideSStreamServer(s grpc.ServiceRegistrar, srv...
function _GreeterServerSideSStream_SayHello_Handler (line 179) | func _GreeterServerSideSStream_SayHello_Handler(srv any, stream grpc.Ser...
type GreeterServerSideSStream_SayHelloServer (line 187) | type GreeterServerSideSStream_SayHelloServer interface
type greeterServerSideSStreamSayHelloServer (line 192) | type greeterServerSideSStreamSayHelloServer struct
method Send (line 196) | func (x *greeterServerSideSStreamSayHelloServer) Send(m *HelloReply) e...
type GreeterClientSideStreamClient (line 217) | type GreeterClientSideStreamClient interface
type greeterClientSideStreamClient (line 222) | type greeterClientSideStreamClient struct
method SayHello (line 230) | func (c *greeterClientSideStreamClient) SayHello(ctx context.Context, ...
function NewGreeterClientSideStreamClient (line 226) | func NewGreeterClientSideStreamClient(cc grpc.ClientConnInterface) Greet...
type GreeterClientSideStream_SayHelloClient (line 239) | type GreeterClientSideStream_SayHelloClient interface
type greeterClientSideStreamSayHelloClient (line 245) | type greeterClientSideStreamSayHelloClient struct
method Send (line 249) | func (x *greeterClientSideStreamSayHelloClient) Send(m *HelloRequest) ...
method CloseAndRecv (line 253) | func (x *greeterClientSideStreamSayHelloClient) CloseAndRecv() (*Hello...
type GreeterClientSideStreamServer (line 267) | type GreeterClientSideStreamServer interface
type UnimplementedGreeterClientSideStreamServer (line 274) | type UnimplementedGreeterClientSideStreamServer struct
method SayHello (line 277) | func (UnimplementedGreeterClientSideStreamServer) SayHello(GreeterClie...
method mustEmbedUnimplementedGreeterClientSideStreamServer (line 280) | func (UnimplementedGreeterClientSideStreamServer) mustEmbedUnimplement...
type UnsafeGreeterClientSideStreamServer (line 286) | type UnsafeGreeterClientSideStreamServer interface
function RegisterGreeterClientSideStreamServer (line 290) | func RegisterGreeterClientSideStreamServer(s grpc.ServiceRegistrar, srv ...
function _GreeterClientSideStream_SayHello_Handler (line 294) | func _GreeterClientSideStream_SayHello_Handler(srv any, stream grpc.Serv...
type GreeterClientSideStream_SayHelloServer (line 298) | type GreeterClientSideStream_SayHelloServer interface
type greeterClientSideStreamSayHelloServer (line 304) | type greeterClientSideStreamSayHelloServer struct
method SendAndClose (line 308) | func (x *greeterClientSideStreamSayHelloServer) SendAndClose(m *HelloR...
method Recv (line 312) | func (x *greeterClientSideStreamSayHelloServer) Recv() (*HelloRequest,...
type GreeterBidirectionalStreamClient (line 337) | type GreeterBidirectionalStreamClient interface
type greeterBidirectionalStreamClient (line 342) | type greeterBidirectionalStreamClient struct
method SayHello (line 350) | func (c *greeterBidirectionalStreamClient) SayHello(ctx context.Contex...
function NewGreeterBidirectionalStreamClient (line 346) | func NewGreeterBidirectionalStreamClient(cc grpc.ClientConnInterface) Gr...
type GreeterBidirectionalStream_SayHelloClient (line 359) | type GreeterBidirectionalStream_SayHelloClient interface
type greeterBidirectionalStreamSayHelloClient (line 365) | type greeterBidirectionalStreamSayHelloClient struct
method Send (line 369) | func (x *greeterBidirectionalStreamSayHelloClient) Send(m *HelloReques...
method Recv (line 373) | func (x *greeterBidirectionalStreamSayHelloClient) Recv() (*HelloReply...
type GreeterBidirectionalStreamServer (line 384) | type GreeterBidirectionalStreamServer interface
type UnimplementedGreeterBidirectionalStreamServer (line 391) | type UnimplementedGreeterBidirectionalStreamServer struct
method SayHello (line 394) | func (UnimplementedGreeterBidirectionalStreamServer) SayHello(GreeterB...
method mustEmbedUnimplementedGreeterBidirectionalStreamServer (line 397) | func (UnimplementedGreeterBidirectionalStreamServer) mustEmbedUnimplem...
type UnsafeGreeterBidirectionalStreamServer (line 403) | type UnsafeGreeterBidirectionalStreamServer interface
function RegisterGreeterBidirectionalStreamServer (line 407) | func RegisterGreeterBidirectionalStreamServer(s grpc.ServiceRegistrar, s...
function _GreeterBidirectionalStream_SayHello_Handler (line 411) | func _GreeterBidirectionalStream_SayHello_Handler(srv any, stream grpc.S...
type GreeterBidirectionalStream_SayHelloServer (line 415) | type GreeterBidirectionalStream_SayHelloServer interface
type greeterBidirectionalStreamSayHelloServer (line 421) | type greeterBidirectionalStreamSayHelloServer struct
method Send (line 425) | func (x *greeterBidirectionalStreamSayHelloServer) Send(m *HelloReply)...
method Recv (line 429) | func (x *greeterBidirectionalStreamSayHelloServer) Recv() (*HelloReque...
FILE: _examples/mvc/grpc-compatible-bidirectional-stream/server/main.go
type Greeter (line 14) | type Greeter struct
method SayHello (line 19) | func (g *Greeter) SayHello(stream pb.GreeterBidirectionalStream_SayHel...
function main (line 34) | func main() {
FILE: _examples/mvc/grpc-compatible/grpc-client/main.go
constant address (line 18) | address = "localhost:443"
constant defaultName (line 19) | defaultName = "world"
function main (line 22) | func main() {
FILE: _examples/mvc/grpc-compatible/helloworld/helloworld.pb.go
constant _ (line 36) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 38) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type HelloRequest (line 42) | type HelloRequest struct
method Reset (line 50) | func (x *HelloRequest) Reset() {
method String (line 59) | func (x *HelloRequest) String() string {
method ProtoMessage (line 63) | func (*HelloRequest) ProtoMessage() {}
method ProtoReflect (line 65) | func (x *HelloRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 78) | func (*HelloRequest) Descriptor() ([]byte, []int) {
method GetName (line 82) | func (x *HelloRequest) GetName() string {
type HelloReply (line 90) | type HelloReply struct
method Reset (line 98) | func (x *HelloReply) Reset() {
method String (line 107) | func (x *HelloReply) String() string {
method ProtoMessage (line 111) | func (*HelloReply) ProtoMessage() {}
method ProtoReflect (line 113) | func (x *HelloReply) ProtoReflect() protoreflect.Message {
method Descriptor (line 126) | func (*HelloReply) Descriptor() ([]byte, []int) {
method GetMessage (line 130) | func (x *HelloReply) GetMessage() string {
function file_helloworld_proto_rawDescGZIP (line 162) | func file_helloworld_proto_rawDescGZIP() []byte {
function init (line 184) | func init() { file_helloworld_proto_init() }
function file_helloworld_proto_init (line 185) | func file_helloworld_proto_init() {
constant _ (line 241) | _ = grpc.SupportPackageIsVersion6
type GreeterClient (line 246) | type GreeterClient interface
type greeterClient (line 251) | type greeterClient struct
method SayHello (line 259) | func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest...
function NewGreeterClient (line 255) | func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
type GreeterServer (line 269) | type GreeterServer interface
type UnimplementedGreeterServer (line 275) | type UnimplementedGreeterServer struct
method SayHello (line 278) | func (*UnimplementedGreeterServer) SayHello(context.Context, *HelloReq...
function RegisterGreeterServer (line 282) | func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
function _Greeter_SayHello_Handler (line 286) | func _Greeter_SayHello_Handler(srv any, ctx context.Context, dec func(an...
FILE: _examples/mvc/grpc-compatible/http-client/main.go
function main (line 15) | func main() {
FILE: _examples/mvc/grpc-compatible/main.go
function main (line 22) | func main() {
function newApp (line 33) | func newApp() *iris.Application {
type service (line 62) | type service interface
type myService (line 66) | type myService struct
method DoSomething (line 68) | func (s *myService) DoSomething() error {
type myController (line 73) | type myController struct
method SayHello (line 88) | func (c *myController) SayHello(ctx context.Context, in *pb.HelloReque...
FILE: _examples/mvc/grpc-compatible/main_test.go
function TestGRPCCompatible (line 9) | func TestGRPCCompatible(t *testing.T) {
FILE: _examples/mvc/hello-world/main.go
function newApp (line 34) | func newApp() *iris.Application {
function main (line 57) | func main() {
type ExampleController (line 68) | type ExampleController struct
method Get (line 73) | func (c *ExampleController) Get() mvc.Result {
method GetPing (line 83) | func (c *ExampleController) GetPing() string {
method GetHello (line 90) | func (c *ExampleController) GetHello() any {
method GetHelloWorld (line 97) | func (c *ExampleController) GetHelloWorld() any {
method BeforeActivation (line 107) | func (c *ExampleController) BeforeActivation(b mvc.BeforeActivation) {
method CustomHandlerWithoutFollowingTheNamingGuide (line 122) | func (c *ExampleController) CustomHandlerWithoutFollowingTheNamingGuid...
type ExampleControllerCustomPath (line 126) | type ExampleControllerCustomPath struct
method GetHelloWorld (line 131) | func (c *ExampleControllerCustomPath) GetHelloWorld() any {
FILE: _examples/mvc/hello-world/main_test.go
function TestMVCHelloWorld (line 9) | func TestMVCHelloWorld(t *testing.T) {
FILE: _examples/mvc/login-mvc-single-responsibility/main.go
function main (line 13) | func main() {
function configureUserMVC (line 41) | func configureUserMVC(userApp *mvc.Application) {
function configure (line 48) | func configure(app *iris.Application) {
FILE: _examples/mvc/login-mvc-single-responsibility/user/auth.go
constant sessionIDKey (line 13) | sessionIDKey = "UserID"
type AuthController (line 22) | type AuthController struct
method BeginRequest (line 37) | func (c *AuthController) BeginRequest(ctx iris.Context) {
method EndRequest (line 43) | func (c *AuthController) EndRequest(ctx iris.Context) {}
method fireError (line 45) | func (c *AuthController) fireError(err error) mvc.View {
method redirectTo (line 53) | func (c *AuthController) redirectTo(id int64) mvc.Response {
method createOrUpdate (line 57) | func (c *AuthController) createOrUpdate(firstname, username, password ...
method isLoggedIn (line 77) | func (c *AuthController) isLoggedIn() bool {
method verify (line 83) | func (c *AuthController) verify(username, password string) (user Model...
method logout (line 105) | func (c *AuthController) logout() mvc.Response {
FILE: _examples/mvc/login-mvc-single-responsibility/user/controller.go
type Controller (line 26) | type Controller struct
method BeforeActivation (line 35) | func (c *Controller) BeforeActivation(b mvc.BeforeActivation) {
method GetRegister (line 48) | func (c *Controller) GetRegister() mvc.Result {
method PostRegister (line 62) | func (c *Controller) PostRegister(form formValue) mvc.Result {
method GetLogin (line 92) | func (c *Controller) GetLogin() mvc.Result {
method PostLogin (line 100) | func (c *Controller) PostLogin(form formValue) mvc.Result {
method AnyLogout (line 116) | func (c *Controller) AnyLogout() {
method GetMe (line 121) | func (c *Controller) GetMe() mvc.Result {
method renderNotFound (line 145) | func (c *Controller) renderNotFound(id int64) mvc.View {
method GetBy (line 167) | func (c *Controller) GetBy(userID int64) mvc.Result {
type formValue (line 30) | type formValue
type page (line 41) | type page struct
method Dispatch (line 161) | func (u Model) Dispatch(ctx iris.Context) {
FILE: _examples/mvc/login-mvc-single-responsibility/user/datasource.go
type DataSource (line 18) | type DataSource struct
method GetBy (line 45) | func (d *DataSource) GetBy(query func(Model) bool) (user Model, found ...
method GetByID (line 58) | func (d *DataSource) GetByID(id int64) (Model, bool) {
method GetByUsername (line 65) | func (d *DataSource) GetByUsername(username string) (Model, bool) {
method getLastID (line 71) | func (d *DataSource) getLastID() (lastID int64) {
method InsertOrUpdate (line 84) | func (d *DataSource) InsertOrUpdate(user Model) (Model, error) {
function NewDataSource (line 24) | func NewDataSource() *DataSource {
FILE: _examples/mvc/login-mvc-single-responsibility/user/model.go
type Model (line 10) | type Model struct
function GeneratePassword (line 26) | func GeneratePassword(userPassword string) ([]byte, error) {
function ValidatePassword (line 31) | func ValidatePassword(userPassword string, hashed []byte) (bool, error) {
FILE: _examples/mvc/login/datamodels/user.go
type User (line 16) | type User struct
method IsValid (line 25) | func (u User) IsValid() bool {
function GeneratePassword (line 31) | func GeneratePassword(userPassword string) ([]byte, error) {
function ValidatePassword (line 36) | func ValidatePassword(userPassword string, hashed []byte) (bool, error) {
FILE: _examples/mvc/login/datasource/users.go
type Engine (line 12) | type Engine
constant Memory (line 17) | Memory Engine = iota
constant Bolt (line 19) | Bolt
constant MySQL (line 21) | MySQL
function LoadUsers (line 25) | func LoadUsers(engine Engine) (map[int64]datamodels.User, error) {
FILE: _examples/mvc/login/main.go
function main (line 20) | func main() {
FILE: _examples/mvc/login/repositories/user_repository.go
type Query (line 11) | type Query
type UserRepository (line 16) | type UserRepository interface
function NewUserRepository (line 28) | func NewUserRepository(source map[int64]datamodels.User) UserRepository {
type userMemoryRepository (line 34) | type userMemoryRepository struct
method Exec (line 46) | func (r *userMemoryRepository) Exec(query Query, action Query, actionL...
method Select (line 84) | func (r *userMemoryRepository) Select(query Query) (user datamodels.Us...
method SelectMany (line 100) | func (r *userMemoryRepository) SelectMany(query Query, limit int) (res...
method InsertOrUpdate (line 112) | func (r *userMemoryRepository) InsertOrUpdate(user datamodels.User) (d...
method Delete (line 169) | func (r *userMemoryRepository) Delete(query Query, limit int) bool {
constant ReadOnlyMode (line 41) | ReadOnlyMode = iota
constant ReadWriteMode (line 43) | ReadWriteMode
FILE: _examples/mvc/login/services/user_service.go
type UserService (line 16) | type UserService interface
function NewUserService (line 30) | func NewUserService(repo repositories.UserRepository) UserService {
type userService (line 36) | type userService struct
method GetAll (line 41) | func (s *userService) GetAll() []datamodels.User {
method GetByID (line 48) | func (s *userService) GetByID(id int64) (datamodels.User, bool) {
method GetByUsernameAndPassword (line 56) | func (s *userService) GetByUsernameAndPassword(username, userPassword ...
method Update (line 76) | func (s *userService) Update(id int64, user datamodels.User) (datamode...
method UpdatePassword (line 82) | func (s *userService) UpdatePassword(id int64, newPassword string) (da...
method UpdateUsername (line 95) | func (s *userService) UpdateUsername(id int64, newUsername string) (da...
method Create (line 104) | func (s *userService) Create(userPassword string, user datamodels.User...
method DeleteByID (line 121) | func (s *userService) DeleteByID(id int64) bool {
FILE: _examples/mvc/login/web/controllers/user_controller.go
type UserController (line 22) | type UserController struct
method getCurrentUserID (line 40) | func (c *UserController) getCurrentUserID() int64 {
method isLoggedIn (line 45) | func (c *UserController) isLoggedIn() bool {
method logout (line 49) | func (c *UserController) logout() {
method GetRegister (line 59) | func (c *UserController) GetRegister() mvc.Result {
method PostRegister (line 68) | func (c *UserController) PostRegister() mvc.Result {
method GetLogin (line 107) | func (c *UserController) GetLogin() mvc.Result {
method PostLogin (line 117) | func (c *UserController) PostLogin() mvc.Result {
method GetMe (line 139) | func (c *UserController) GetMe() mvc.Result {
method AnyLogout (line 164) | func (c *UserController) AnyLogout() {
constant userIDKey (line 38) | userIDKey = "UserID"
FILE: _examples/mvc/login/web/controllers/users_controller.go
type UsersController (line 16) | type UsersController struct
method Get (line 44) | func (c *UsersController) Get() (results []datamodels.User) {
method GetBy (line 51) | func (c *UsersController) GetBy(id int64) (user datamodels.User, found...
method PutBy (line 66) | func (c *UsersController) PutBy(id int64) (datamodels.User, error) {
method DeleteBy (line 80) | func (c *UsersController) DeleteBy(id int64) any {
FILE: _examples/mvc/middleware/main.go
function main (line 15) | func main() {
function configure (line 28) | func configure(m *mvc.Application) {
type exampleController (line 35) | type exampleController struct
method Get (line 39) | func (c *exampleController) Get() string {
method GetOther (line 44) | func (c *exampleController) GetOther() string {
FILE: _examples/mvc/middleware/per-method/main.go
function main (line 85) | func main() {
type exampleController (line 96) | type exampleController struct
method AfterActivation (line 98) | func (c *exampleController) AfterActivation(a mvc.AfterActivation) {
method Get (line 107) | func (c *exampleController) Get() string {
FILE: _examples/mvc/middleware/without-ctx-next/main.go
function main (line 15) | func main() {
function doneHandler (line 34) | func doneHandler(ctx iris.Context) {
type exampleController (line 38) | type exampleController struct
method Get (line 40) | func (c *exampleController) Get() string {
FILE: _examples/mvc/overview/controller/greet_controller.go
type GreetController (line 9) | type GreetController struct
method Get (line 16) | func (c *GreetController) Get(req model.Request) (model.Response, erro...
FILE: _examples/mvc/overview/database/database.go
type DB (line 6) | type DB interface
function NewDB (line 11) | func NewDB(env environment.Env) DB {
FILE: _examples/mvc/overview/database/mysql.go
type mysql (line 5) | type mysql struct
method Exec (line 7) | func (db *mysql) Exec(q string) error {
FILE: _examples/mvc/overview/database/sqlite.go
type sqlite (line 3) | type sqlite struct
method Exec (line 5) | func (db *sqlite) Exec(q string) error { return nil }
FILE: _examples/mvc/overview/environment/environment.go
constant PROD (line 10) | PROD Env = "production"
constant DEV (line 11) | DEV Env = "development"
type Env (line 15) | type Env
method String (line 18) | func (e Env) String() string {
function ReadEnv (line 26) | func ReadEnv(key string, def Env) Env {
function Getenv (line 44) | func Getenv(key string, def string) string {
FILE: _examples/mvc/overview/main.go
function main (line 13) | func main() {
function pong (line 26) | func pong(ctx iris.Context) {
function setup (line 78) | func setup(app *mvc.Application) {
FILE: _examples/mvc/overview/model/request.go
type Request (line 4) | type Request struct
FILE: _examples/mvc/overview/model/response.go
type Response (line 4) | type Response struct
FILE: _examples/mvc/overview/service/greet_service.go
type GreetService (line 11) | type GreetService interface
function NewGreetService (line 16) | func NewGreetService(env environment.Env, db database.DB) GreetService {
type greeter (line 29) | type greeter struct
method Say (line 34) | func (s *greeter) Say(input string) (string, error) {
type greeterWithLogging (line 43) | type greeterWithLogging struct
method Say (line 47) | func (s *greeterWithLogging) Say(input string) (string, error) {
FILE: _examples/mvc/regexp/main.go
function main (line 19) | func main() {
type myController (line 30) | type myController struct
method BeforeActivation (line 32) | func (m *myController) BeforeActivation(b mvc.BeforeActivation) {
method HandleJSON (line 47) | func (m *myController) HandleJSON(file string) string {
FILE: _examples/mvc/repository/datamodels/movie.go
type Movie (line 12) | type Movie struct
FILE: _examples/mvc/repository/main.go
function main (line 16) | func main() {
function movies (line 37) | func movies(app *mvc.Application) {
FILE: _examples/mvc/repository/repositories/movie_repository.go
type Query (line 13) | type Query
type MovieRepository (line 18) | type MovieRepository interface
function NewMovieRepository (line 30) | func NewMovieRepository(source map[int64]datamodels.Movie) MovieReposito...
type movieMemoryRepository (line 36) | type movieMemoryRepository struct
method Exec (line 48) | func (r *movieMemoryRepository) Exec(query Query, action Query, action...
method Select (line 86) | func (r *movieMemoryRepository) Select(query Query) (movie datamodels....
method SelectMany (line 102) | func (r *movieMemoryRepository) SelectMany(query Query, limit int) (re...
method InsertOrUpdate (line 114) | func (r *movieMemoryRepository) InsertOrUpdate(movie datamodels.Movie)...
method Delete (line 171) | func (r *movieMemoryRepository) Delete(query Query, limit int) bool {
constant ReadOnlyMode (line 43) | ReadOnlyMode = iota
constant ReadWriteMode (line 45) | ReadWriteMode
FILE: _examples/mvc/repository/services/movie_service.go
type MovieService (line 16) | type MovieService interface
function NewMovieService (line 24) | func NewMovieService(repo repositories.MovieRepository) MovieService {
type movieService (line 30) | type movieService struct
method GetAll (line 35) | func (s *movieService) GetAll() []datamodels.Movie {
method GetByID (line 42) | func (s *movieService) GetByID(id int64) (datamodels.Movie, bool) {
method UpdatePosterAndGenreByID (line 49) | func (s *movieService) UpdatePosterAndGenreByID(id int64, poster strin...
method DeleteByID (line 61) | func (s *movieService) DeleteByID(id int64) bool {
FILE: _examples/mvc/repository/web/controllers/hello_controller.go
type HelloController (line 13) | type HelloController struct
method Get (line 29) | func (c *HelloController) Get() mvc.Result {
method GetBy (line 44) | func (c *HelloController) GetBy(name string) mvc.Result {
FILE: _examples/mvc/repository/web/controllers/movie_controller.go
type MovieController (line 15) | type MovieController struct
method Get (line 37) | func (c *MovieController) Get() (results []datamodels.Movie) {
method GetBy (line 44) | func (c *MovieController) GetBy(id int64) (movie datamodels.Movie, fou...
method PutBy (line 51) | func (c *MovieController) PutBy(ctx iris.Context, id int64) (datamodel...
method DeleteBy (line 70) | func (c *MovieController) DeleteBy(id int64) any {
FILE: _examples/mvc/request-default-values/main.go
function main (line 17) | func main() {
type params (line 32) | type params struct
type controller (line 73) | type controller struct
method GetRecords (line 75) | func (c *controller) GetRecords(stru params) string {
FILE: _examples/mvc/session-controller/main.go
type VisitController (line 13) | type VisitController struct
method Get (line 24) | func (c *VisitController) Get() string {
function newApp (line 34) | func newApp() *iris.Application {
function main (line 49) | func main() {
FILE: _examples/mvc/session-controller/main_test.go
function TestMVCSession (line 9) | func TestMVCSession(t *testing.T) {
FILE: _examples/mvc/singleton/main.go
function main (line 11) | func main() {
type globalVisitorsController (line 19) | type globalVisitorsController struct
method Get (line 33) | func (c *globalVisitorsController) Get() string {
FILE: _examples/mvc/versioned-controller/main.go
function main (line 17) | func main() {
function newApp (line 24) | func newApp() *iris.Application {
type v1Controller (line 40) | type v1Controller struct
method Get (line 42) | func (c *v1Controller) Get() string {
type v2Controller (line 46) | type v2Controller struct
method Get (line 48) | func (c *v2Controller) Get() string {
type v3Controller (line 52) | type v3Controller struct
method Get (line 54) | func (c *v3Controller) Get() string {
type noVersionController (line 58) | type noVersionController struct
method Get (line 60) | func (c *noVersionController) Get() string {
FILE: _examples/mvc/versioned-controller/main_test.go
function TestVersionedController (line 11) | func TestVersionedController(t *testing.T) {
FILE: _examples/mvc/vuejs-todo-mvc/src/todo/item.go
type Item (line 3) | type Item struct
FILE: _examples/mvc/vuejs-todo-mvc/src/todo/service.go
type Service (line 7) | type Service interface
type MemoryService (line 12) | type MemoryService struct
method Get (line 25) | func (s *MemoryService) Get(sessionOwner string) []Item {
method Save (line 33) | func (s *MemoryService) Save(sessionOwner string, newItems []Item) err...
function NewMemoryService (line 19) | func NewMemoryService() *MemoryService {
FILE: _examples/mvc/vuejs-todo-mvc/src/web/controllers/todo_controller.go
type TodoController (line 13) | type TodoController struct
method BeforeActivation (line 25) | func (c *TodoController) BeforeActivation(b mvc.BeforeActivation) {
method Get (line 35) | func (c *TodoController) Get() []todo.Item {
method Post (line 48) | func (c *TodoController) Post(newItems []todo.Item) PostItemResponse {
method Save (line 56) | func (c *TodoController) Save(msg websocket.Message) error {
type PostItemResponse (line 41) | type PostItemResponse struct
FILE: _examples/mvc/vuejs-todo-mvc/src/web/main.go
function main (line 15) | func main() {
FILE: _examples/mvc/vuejs-todo-mvc/src/web/public/js/app.js
function fetchTodos (line 23) | function fetchTodos(onComplete) {
function onHashChange (line 200) | function onHashChange() {
FILE: _examples/mvc/websocket-auth/main.go
function main (line 16) | func main() {
function newApp (line 25) | func newApp() *iris.Application {
function renderSigninForm (line 53) | func renderSigninForm(ctx iris.Context) {
type websocketController (line 60) | type websocketController struct
method Namespace (line 64) | func (c *websocketController) Namespace() string {
method OnChat (line 68) | func (c *websocketController) OnChat(msg websocket.Message) error {
FILE: _examples/mvc/websocket-auth/user.go
type AccessRole (line 6) | type AccessRole
method Is (line 8) | func (r AccessRole) Is(v AccessRole) bool {
method Allow (line 12) | func (r AccessRole) Allow(v AccessRole) bool {
constant InvalidAccessRole (line 17) | InvalidAccessRole AccessRole = 1 << iota
constant Read (line 18) | Read
constant Write (line 19) | Write
constant Delete (line 20) | Delete
constant Owner (line 22) | Owner = Read | Write | Delete
constant Member (line 23) | Member = Read | Write
type User (line 26) | type User struct
method GetID (line 32) | func (u User) GetID() string {
FILE: _examples/mvc/websocket-auth/user_provider.go
type Provider (line 15) | type Provider struct
method Signin (line 42) | func (p *Provider) Signin(ctx context.Context, username, password stri...
method ValidateToken (line 53) | func (p *Provider) ValidateToken(ctx context.Context, standardClaims a...
method InvalidateToken (line 85) | func (p *Provider) InvalidateToken(ctx context.Context, standardClaims...
method InvalidateTokens (line 94) | func (p *Provider) InvalidateTokens(ctx context.Context, u User) error...
function NewProvider (line 23) | func NewProvider() *Provider {
FILE: _examples/mvc/websocket/main.go
function main (line 12) | func main() {
function increment (line 39) | func increment() uint64 {
function decrement (line 43) | func decrement() uint64 {
type websocketController (line 47) | type websocketController struct
method OnNamespaceDisconnect (line 61) | func (c *websocketController) OnNamespaceDisconnect(msg websocket.Mess...
method OnNamespaceConnected (line 76) | func (c *websocketController) OnNamespaceConnected(msg websocket.Messa...
method OnChat (line 97) | func (c *websocketController) OnChat(msg websocket.Message) error {
type LoggerService (line 108) | type LoggerService interface
type prefixedLogger (line 112) | type prefixedLogger struct
method Log (line 116) | func (s *prefixedLogger) Log(msg string) {
FILE: _examples/pprof/main.go
function main (line 9) | func main() {
FILE: _examples/project/api/configuration.go
type Configuration (line 13) | type Configuration struct
method BindFile (line 38) | func (c *Configuration) BindFile(filename string) error {
FILE: _examples/project/api/router.go
method buildRouter (line 15) | func (srv *Server) buildRouter() {
FILE: _examples/project/api/server.go
type Server (line 17) | type Server struct
method prepare (line 45) | func (srv *Server) prepare() error {
method registerMiddlewares (line 59) | func (srv *Server) registerMiddlewares() {
method registerDebugFeatures (line 71) | func (srv *Server) registerDebugFeatures() {}
method registerAccessLogger (line 73) | func (srv *Server) registerAccessLogger() {
method Start (line 113) | func (srv *Server) Start() error {
method AddCloser (line 137) | func (srv *Server) AddCloser(closers ...func()) {
method Close (line 151) | func (srv *Server) Close() error {
function NewServer (line 28) | func NewServer(c Configuration) *Server {
FILE: _examples/project/api/users/api.go
type API (line 9) | type API struct
method Configure (line 13) | func (api *API) Configure(r iris.Party) {
method getInfo (line 22) | func (api *API) getInfo(ctx iris.Context) {
method signUp (line 26) | func (api *API) signUp(ctx iris.Context) {}
method signIn (line 27) | func (api *API) signIn(ctx iris.Context) {}
FILE: _examples/project/cmd/cmd.go
constant defaultConfigFilename (line 10) | defaultConfigFilename = "server.yml"
function New (line 17) | func New() *cobra.Command {
function startServer (line 55) | func startServer() error {
FILE: _examples/project/cmd/help.go
type HelpTemplate (line 12) | type HelpTemplate struct
method String (line 20) | func (h HelpTemplate) String() string {
FILE: _examples/project/main.go
function main (line 10) | func main() {
FILE: _examples/project/pkg/database/database.go
type DB (line 3) | type DB struct
function Open (line 7) | func Open(connString string) *DB {
FILE: _examples/project/pkg/http/handlers/cors.go
function CORS (line 7) | func CORS(allowedOrigin string) iris.Handler { // or "github.com/iris-co...
FILE: _examples/project/user/repository.go
type Repository (line 5) | type Repository interface
type repo (line 8) | type repo struct
function NewRepository (line 12) | func NewRepository(db *database.DB) Repository {
FILE: _examples/project/user/user.go
type User (line 3) | type User struct
FILE: _examples/recover/main.go
function main (line 9) | func main() {
FILE: _examples/recover/panic-and-custom-error-handler-with-compression/main.go
function main (line 11) | func main() {
function myErrorHandler (line 21) | func myErrorHandler(ctx iris.Context) {
function handler (line 58) | func handler(ctx iris.Context) {
FILE: _examples/request-body/form-query-headers-params-decoder/main.go
type MyType (line 31) | type MyType struct
function main (line 35) | func main() {
FILE: _examples/request-body/read-body/main.go
function main (line 7) | func main() {
function newApp (line 13) | func newApp() *iris.Application {
type payload (line 25) | type payload struct
function readBody (line 29) | func readBody(ctx iris.Context) {
function setAllowedResponses (line 49) | func setAllowedResponses(ctx iris.Context) {
FILE: _examples/request-body/read-body/main_test.go
function TestReadBodyAndNegotiate (line 9) | func TestReadBodyAndNegotiate(t *testing.T) {
FILE: _examples/request-body/read-custom-per-type/main.go
function main (line 9) | func main() {
function newApp (line 25) | func newApp() *iris.Application {
type config (line 33) | type config struct
method Decode (line 40) | func (c *config) Decode(body []byte) error {
function handler (line 44) | func handler(ctx iris.Context) {
FILE: _examples/request-body/read-custom-per-type/main_test.go
function TestReadCustomPerType (line 9) | func TestReadCustomPerType(t *testing.T) {
FILE: _examples/request-body/read-custom-via-unmarshaler/main.go
function main (line 9) | func main() {
function newApp (line 25) | func newApp() *iris.Application {
type config (line 33) | type config struct
function handler (line 52) | func handler(ctx iris.Context) {
FILE: _examples/request-body/read-custom-via-unmarshaler/main_test.go
function TestReadCustomViaUnmarshaler (line 9) | func TestReadCustomViaUnmarshaler(t *testing.T) {
FILE: _examples/request-body/read-form/checkboxes/main.go
function main (line 9) | func main() {
function showForm (line 19) | func showForm(ctx iris.Context) {
type formExample (line 26) | type formExample struct
function handleForm (line 30) | func handleForm(ctx iris.Context) {
FILE: _examples/request-body/read-form/main.go
type Visitor (line 10) | type Visitor struct
function main (line 16) | func main() {
FILE: _examples/request-body/read-headers/main.go
type myHeaders (line 9) | type myHeaders struct
function main (line 14) | func main() {
function newApp (line 27) | func newApp() *iris.Application {
FILE: _examples/request-body/read-headers/main_test.go
function TestReadHeaders (line 9) | func TestReadHeaders(t *testing.T) {
FILE: _examples/request-body/read-json-stream/main.go
function main (line 5) | func main() {
type User (line 35) | type User struct
function postIndex (line 39) | func postIndex(ctx iris.Context) {
function postIndexStream (line 57) | func postIndexStream(ctx iris.Context) {
FILE: _examples/request-body/read-json-struct-validation/main.go
function main (line 17) | func main() {
type User (line 74) | type User struct
type Address (line 84) | type Address struct
type validationError (line 91) | type validationError struct
function wrapValidationErrors (line 100) | func wrapValidationErrors(errs validator.ValidationErrors) []validationE...
function postUser (line 116) | func postUser(ctx iris.Context) {
function resolveErrorsDocumentation (line 144) | func resolveErrorsDocumentation(ctx iris.Context) {
FILE: _examples/request-body/read-json/main.go
type Company (line 7) | type Company struct
function MyHandler (line 13) | func MyHandler(ctx iris.Context) {
type Person (line 25) | type Person struct
function MyHandler2 (line 31) | func MyHandler2(ctx iris.Context) {
function main (line 42) | func main() {
FILE: _examples/request-body/read-many/main.go
function main (line 7) | func main() {
function logAllBody (line 35) | func logAllBody(ctx iris.Context) {
function logJSON (line 44) | func logJSON(ctx iris.Context) {
function logFormValues (line 53) | func logFormValues(ctx iris.Context) {
FILE: _examples/request-body/read-msgpack/main.go
type User (line 6) | type User struct
function readMsgPack (line 14) | func readMsgPack(ctx iris.Context) {
function main (line 25) | func main() {
FILE: _examples/request-body/read-params/main.go
type myParams (line 9) | type myParams struct
function main (line 15) | func main() {
function newApp (line 23) | func newApp() *iris.Application {
FILE: _examples/request-body/read-params/main_test.go
function TestReadParams (line 9) | func TestReadParams(t *testing.T) {
FILE: _examples/request-body/read-query/main.go
type MyType (line 9) | type MyType struct
function main (line 14) | func main() {
FILE: _examples/request-body/read-url/main.go
type myURL (line 9) | type myURL struct
function main (line 15) | func main() {
function newApp (line 23) | func newApp() *iris.Application {
FILE: _examples/request-body/read-url/main_test.go
function TestReadURL (line 9) | func TestReadURL(t *testing.T) {
FILE: _examples/request-body/read-xml/main.go
function main (line 9) | func main() {
function newApp (line 26) | func newApp() *iris.Application {
type person (line 34) | type person struct
function handler (line 41) | func handler(ctx iris.Context) {
FILE: _examples/request-body/read-xml/main_test.go
function TestReadXML (line 9) | func TestReadXML(t *testing.T) {
FILE: _examples/request-body/read-yaml/main.go
function newApp (line 7) | func newApp() *iris.Application {
type product (line 15) | type product struct
function handler (line 22) | func handler(ctx iris.Context) {
function main (line 32) | func main() {
FILE: _examples/request-body/read-yaml/main_test.go
function TestReadYAML (line 9) | func TestReadYAML(t *testing.T) {
FILE: _examples/request-ratelimit/rate-middleware/main.go
function main (line 10) | func main() {
function newApp (line 26) | func newApp() *iris.Application {
function useAPIKey (line 65) | func useAPIKey(ctx iris.Context) {
function list (line 78) | func list(ctx iris.Context) {
function index (line 82) | func index(ctx iris.Context) {
function other (line 86) | func other(ctx iris.Context) {
FILE: _examples/request-ratelimit/ulule-limiter/main.go
function main (line 15) | func main() {
function helloWorldHandler (line 21) | func helloWorldHandler(ctx iris.Context) {
function IPRateLimit (line 30) | func IPRateLimit() iris.Handler {
FILE: _examples/request-referrer/main.go
function main (line 7) | func main() {
FILE: _examples/response-writer/cache/client-side/main.go
constant refreshEvery (line 14) | refreshEvery = 10 * time.Second
function main (line 16) | func main() {
function greet (line 36) | func greet(ctx iris.Context) {
FILE: _examples/response-writer/cache/simple/main.go
function main (line 28) | func main() {
function writeMarkdown (line 66) | func writeMarkdown(ctx iris.Context) {
function pagesIndex (line 74) | func pagesIndex(ctx iris.Context) {
function pagesIndexPost (line 79) | func pagesIndexPost(ctx iris.Context) {
function protected (line 84) | func protected(ctx iris.Context) {
function customIndex (line 89) | func customIndex(ctx iris.Context) {
function customIndexPost (line 93) | func customIndexPost(ctx iris.Context) {
FILE: _examples/response-writer/content-negotiation/main.go
type testdata (line 6) | type testdata struct
function newApp (line 11) | func newApp() *iris.Application {
function main (line 111) | func main() {
FILE: _examples/response-writer/content-negotiation/main_test.go
function TestContentNegotiation (line 14) | func TestContentNegotiation(t *testing.T) {
FILE: _examples/response-writer/http2push/main.go
function main (line 14) | func main() {
function pushHandler (line 24) | func pushHandler(ctx iris.Context) {
function simpleAssetHandler (line 46) | func simpleAssetHandler(ctx iris.Context) {
FILE: _examples/response-writer/json-third-party/main.go
function init (line 10) | func init() {
function applyIrisGlobalPatches (line 14) | func applyIrisGlobalPatches() {
type User (line 28) | type User struct
function main (line 35) | func main() {
FILE: _examples/response-writer/protobuf/main.go
function main (line 9) | func main() {
function send (line 20) | func send(ctx iris.Context) {
function sendAsJSON (line 25) | func sendAsJSON(ctx iris.Context) {
function read (line 38) | func read(ctx iris.Context) {
function readFromJSON (line 50) | func readFromJSON(ctx iris.Context) {
FILE: _examples/response-writer/protobuf/protos/hello.pb.go
constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
constant _ (line 26) | _ = proto.ProtoPackageIsVersion4
type HelloRequest (line 28) | type HelloRequest struct
method Reset (line 36) | func (x *HelloRequest) Reset() {
method String (line 45) | func (x *HelloRequest) String() string {
method ProtoMessage (line 49) | func (*HelloRequest) ProtoMessage() {}
method ProtoReflect (line 51) | func (x *HelloRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 64) | func (*HelloRequest) Descriptor() ([]byte, []int) {
method GetName (line 68) | func (x *HelloRequest) GetName() string {
type HelloReply (line 75) | type HelloReply struct
method Reset (line 83) | func (x *HelloReply) Reset() {
method String (line 92) | func (x *HelloReply) String() string {
method ProtoMessage (line 96) | func (*HelloReply) ProtoMessage() {}
method ProtoReflect (line 98) | func (x *HelloReply) ProtoReflect() protoreflect.Message {
method Descriptor (line 111) | func (*HelloReply) Descriptor() ([]byte, []int) {
method GetMessage (line 115) | func (x *HelloReply) GetMessage() string {
function file_hello_proto_rawDescGZIP (line 140) | func file_hello_proto_rawDescGZIP() []byte {
function init (line 160) | func init() { file_hello_proto_init() }
function file_hello_proto_init (line 161) | func file_hello_proto_init() {
FILE: _examples/response-writer/sse-third-party-2/main.go
function main (line 18) | func main() {
FILE: _examples/response-writer/sse-third-party/main.go
function main (line 12) | func main() {
FILE: _examples/response-writer/sse/main.go
type Broker (line 18) | type Broker struct
method listen (line 49) | func (b *Broker) listen() {
method ServeHTTP (line 74) | func (b *Broker) ServeHTTP(ctx iris.Context) {
function NewBroker (line 34) | func NewBroker() *Broker {
type event (line 116) | type event struct
constant script (line 121) | script = `<script type="text/javascript">
function main (line 145) | func main() {
FILE: _examples/response-writer/stream-writer/main.go
function main (line 13) | func main() {
FILE: _examples/response-writer/write-rest/main.go
type User (line 11) | type User struct
type ExampleXML (line 19) | type ExampleXML struct
type ExampleYAML (line 26) | type ExampleYAML struct
function main (line 31) | func main() {
type errorHandler (line 171) | type errorHandler struct
method HandleContextError (line 173) | func (h *errorHandler) HandleContextError(ctx iris.Context, err error) {
FILE: _examples/routing/basic/main.go
function newApp (line 7) | func newApp() *iris.Application {
function main (line 163) | func main() {
function adminMiddleware (line 190) | func adminMiddleware(ctx iris.Context) {
function notFoundHandler (line 195) | func notFoundHandler(ctx iris.Context) {
FILE: _examples/routing/basic/main_test.go
function TestRoutingBasic (line 19) | func TestRoutingBasic(t *testing.T) {
FILE: _examples/routing/conditional-chain/main.go
function newApp (line 7) | func newApp() *iris.Application {
function main (line 50) | func main() {
FILE: _examples/routing/conditional-chain/main_test.go
function TestNewConditionalHandler (line 9) | func TestNewConditionalHandler(t *testing.T) {
FILE: _examples/routing/custom-context/main.go
function main (line 10) | func main() {
function index (line 30) | func index(ctx *myCustomContext) {
type myCustomContextPool (line 39) | type myCustomContextPool struct
method Acquire (line 44) | func (p *myCustomContextPool) Acquire(ctx iris.Context) *myCustomConte...
method Release (line 57) | func (p *myCustomContextPool) Release(t *myCustomContext) {
type myCustomContext (line 67) | type myCustomContext struct
method SetContext (line 79) | func (c *myCustomContext) SetContext(ctx iris.Context) {
method HTML (line 83) | func (c *myCustomContext) HTML(format string, args ...any) (int, error) {
FILE: _examples/routing/custom-router/main.go
type customRouter (line 25) | type customRouter struct
method HandleRequest (line 34) | func (r *customRouter) HandleRequest(ctx iris.Context) {
method Build (line 59) | func (r *customRouter) Build(provider router.RoutesProvider) error {
method RouteExists (line 71) | func (r *customRouter) RouteExists(ctx iris.Context, method, path stri...
method FireErrorCode (line 76) | func (r *customRouter) FireErrorCode(ctx iris.Context) {
function main (line 81) | func main() {
FILE: _examples/routing/custom-wrapper/main.go
function newApp (line 13) | func newApp() *iris.Application {
function main (line 55) | func main() {
FILE: _examples/routing/custom-wrapper/main_test.go
type resource (line 12) | type resource
method String (line 14) | func (r resource) String() string {
method strip (line 18) | func (r resource) strip(strip string) string {
method loadFromBase (line 23) | func (r resource) loadFromBase(dir string) string {
function TestCustomWrapper (line 47) | func TestCustomWrapper(t *testing.T) {
FILE: _examples/routing/dynamic-path/at-username/main.go
function main (line 5) | func main() {
FILE: _examples/routing/dynamic-path/main.go
function main (line 9) | func main() {
FILE: _examples/routing/dynamic-path/root-wildcard/main.go
function main (line 7) | func main() {
function h (line 44) | func h(ctx iris.Context) {
function staticWildcardH (line 49) | func staticWildcardH(ctx iris.Context) {
function other (line 54) | func other(ctx iris.Context) {
function other2 (line 59) | func other2(ctx iris.Context) {
function staticPath (line 64) | func staticPath(ctx iris.Context) {
function staticPathOther2 (line 68) | func staticPathOther2(ctx iris.Context) {
FILE: _examples/routing/dynamic-path/same-pattern-different-func/main.go
function main (line 5) | func main() {
function newApp (line 11) | func newApp() *iris.Application {
function handler1 (line 20) | func handler1(ctx iris.Context) {
function handler2 (line 24) | func handler2(ctx iris.Context) {
function reply (line 28) | func reply(ctx iris.Context) {
FILE: _examples/routing/dynamic-path/same-pattern-different-func/main_test.go
function TestSameParameterTypeDifferentMacroFunctions (line 10) | func TestSameParameterTypeDifferentMacroFunctions(t *testing.T) {
FILE: _examples/routing/dynamic-path/same-pattern-different-func/use-global/main.go
function main (line 7) | func main() {
function newApp (line 12) | func newApp() *iris.Application {
function middleware (line 26) | func middleware(str string) iris.Handler {
function handler (line 33) | func handler(str string) iris.Handler {
function onDone (line 40) | func onDone(ctx iris.Context) {
FILE: _examples/routing/dynamic-path/same-pattern-different-func/use-global/main_test.go
function TestSamePatternDifferentFuncUseGlobal (line 10) | func TestSamePatternDifferentFuncUseGlobal(t *testing.T) {
FILE: _examples/routing/hello-world/main.go
function main (line 10) | func main() {
FILE: _examples/routing/http-errors/main.go
function main (line 8) | func main() {
function newProductProblem (line 45) | func newProductProblem(productName, detail string) iris.Problem {
function problemExample (line 61) | func problemExample(ctx iris.Context) {
FILE: _examples/routing/http-errors/reset-body/main.go
function main (line 9) | func main() {
function newApp (line 14) | func newApp() *iris.Application {
function onErrorCode (line 26) | func onErrorCode(ctx iris.Context) {
function handler (line 34) | func handler(ctx iris.Context) {
FILE: _examples/routing/http-errors/reset-body/main_test.go
function TestResetCompressionAndFireError (line 9) | func TestResetCompressionAndFireError(t *testing.T) { // #1569
FILE: _examples/routing/http-wire-errors/main.go
function main (line 37) | func main() {
function fireCustomErrorCodeName (line 53) | func fireCustomErrorCodeName(ctx iris.Context) {
function fireInvalidArgument (line 57) | func fireInvalidArgument(ctx iris.Context) {
function fireErrorWithProblem (line 77) | func fireErrorWithProblem(ctx iris.Context) {
FILE: _examples/routing/http-wire-errors/service/main.go
function main (line 14) | func main() {
function createHandler (line 28) | func createHandler(service *myService) iris.Handler {
function listAllHandler (line 41) | func listAllHandler(service *myService) iris.Handler {
function listHandler (line 55) | func listHandler(service *myService) iris.Handler {
function deleteHandler (line 61) | func deleteHandler(service *myService) iris.Handler {
type myService (line 82) | type myService struct
method Create (line 171) | func (s *myService) Create(ctx context.Context, in CreateRequest) (Cre...
method ListAll (line 189) | func (s *myService) ListAll(ctx context.Context, in ListRequest) ([]Cr...
method ListPaginated (line 215) | func (s *myService) ListPaginated(ctx context.Context, opts pagination...
method GetByID (line 235) | func (s *myService) GetByID(ctx context.Context, id string) (CreateRes...
method Delete (line 239) | func (s *myService) Delete(ctx context.Context, id string) error {
method Update (line 243) | func (s *myService) Update(ctx context.Context, req CreateRequest) (bo...
method DeleteWithFeedback (line 247) | func (s *myService) DeleteWithFeedback(ctx context.Context, id string)...
type CreateRequest (line 84) | type CreateRequest struct
method HandleRequest (line 116) | func (r *CreateRequest) HandleRequest(ctx iris.Context) error {
type CreateResponse (line 90) | type CreateResponse struct
function afterServiceCallButBeforeDataSent (line 166) | func afterServiceCallButBeforeDataSent(ctx iris.Context, req CreateReque...
type ListRequest (line 186) | type ListRequest struct
type ListFilter (line 211) | type ListFilter struct
FILE: _examples/routing/intelligence/main.go
function main (line 5) | func main() {
function handler (line 22) | func handler(ctx iris.Context) {
FILE: _examples/routing/intelligence/manual/main.go
function main (line 9) | func main() {
function notFound (line 25) | func notFound(ctx iris.Context) {
function handler (line 39) | func handler(ctx iris.Context) {
FILE: _examples/routing/macros/main.go
function main (line 16) | func main() {
FILE: _examples/routing/main.go
constant maxBodySize (line 15) | maxBodySize = 1 << 20
constant notFoundHTML (line 16) | notFoundHTML = "<h1> custom http error page </h1>"
function registerErrors (line 18) | func registerErrors(app *iris.Application) {
function registerGamesRoutes (line 25) | func registerGamesRoutes(app *iris.Application) {
function registerSubdomains (line 84) | func registerSubdomains(app *iris.Application) {
function newApp (line 94) | func newApp() *iris.Application {
function h (line 130) | func h(ctx iris.Context) {
function main (line 147) | func main() {
FILE: _examples/routing/main_test.go
function calculatePathAndResponse (line 11) | func calculatePathAndResponse(method, subdomain, path string, paramKeyVa...
type troute (line 48) | type troute struct
function newTroute (line 55) | func newTroute(method, subdomain, path string, status int, paramKeyValue...
function TestRouting (line 74) | func TestRouting(t *testing.T) {
FILE: _examples/routing/overview-2/main.go
type User (line 10) | type User struct
function main (line 18) | func main() {
function logThisMiddleware (line 91) | func logThisMiddleware(ctx iris.Context) {
function profileByUsername (line 99) | func profileByUsername(ctx iris.Context) {
function getUserByID (line 111) | func getUserByID(ctx iris.Context) {
function createUser (line 119) | func createUser(ctx iris.Context) {
FILE: _examples/routing/overview/main.go
function main (line 11) | func main() {
function privateHandler (line 150) | func privateHandler(ctx iris.Context) {
function execPrivateHandler (line 155) | func execPrivateHandler(ctx iris.Context) {
function info (line 159) | func info(ctx iris.Context) {
function todayFilename (line 178) | func todayFilename() string {
function newLogFile (line 183) | func newLogFile() *os.File {
FILE: _examples/routing/party-controller/main.go
function main (line 11) | func main() {
type WeatherController (line 32) | type WeatherController struct
method Configure (line 36) | func (api *WeatherController) Configure(r iris.Party) {
method getCurrentData (line 42) | func (api *WeatherController) getCurrentData(ctx iris.Context) {
FILE: _examples/routing/party-controller/pkg/weatherapi/client.go
constant BaseURL (line 12) | BaseURL = "https://api.weatherapi.com/v1"
type Options (line 15) | type Options struct
type Client (line 19) | type Client struct
method GetCurrentByCity (line 33) | func (c *Client) GetCurrentByCity(ctx context.Context, city string) (r...
function NewClient (line 24) | func NewClient(opts Options) *Client {
FILE: _examples/routing/party-controller/pkg/weatherapi/response.go
type Response (line 3) | type Response struct
FILE: _examples/routing/remove-handler/main.go
function main (line 5) | func main() {
function newApp (line 10) | func newApp() *iris.Application {
function myMiddleware (line 23) | func myMiddleware(ctx iris.Context) {
function usersIndex (line 27) | func usersIndex(ctx iris.Context) {
FILE: _examples/routing/remove-handler/main_test.go
function TestSimpleRouteRemoveHandler (line 9) | func TestSimpleRouteRemoveHandler(t *testing.T) {
FILE: _examples/routing/remove-route/main.go
function main (line 7) | func main() {
function index (line 18) | func index(ctx iris.Context) {
function about (line 22) | func about(ctx iris.Context) {
FILE: _examples/routing/reverse/main.go
function main (line 8) | func main() {
FILE: _examples/routing/rewrite/main.go
function main (line 8) | func main() {
function index (line 38) | func index(ctx iris.Context) {
function about (line 42) | func about(ctx iris.Context) {
function docs (line 46) | func docs(ctx iris.Context) {
function listUsers (line 50) | func listUsers(ctx iris.Context) {
function testIndex (line 64) | func testIndex(ctx iris.Context) {
function newTestIndex (line 70) | func newTestIndex(ctx iris.Context) {
function newTestAbout (line 74) | func newTestAbout(ctx iris.Context) {
FILE: _examples/routing/route-handlers-execution-rules/main.go
function main (line 31) | func main() {
function mainHandler (line 53) | func mainHandler(ctx iris.Context) {
function doneHandler (line 59) | func doneHandler(ctx iris.Context) {
FILE: _examples/routing/route-register-rule/main.go
function main (line 5) | func main() {
function newApp (line 14) | func newApp() *iris.Application {
function getHandler (line 39) | func getHandler(ctx iris.Context) {
function anyHandler (line 43) | func anyHandler(ctx iris.Context) {
FILE: _examples/routing/route-register-rule/main_test.go
function TestRouteRegisterRuleExample (line 10) | func TestRouteRegisterRuleExample(t *testing.T) {
FILE: _examples/routing/route-state/main.go
function main (line 7) | func main() {
FILE: _examples/routing/sitemap/main.go
constant startURL (line 9) | startURL = "http://localhost:8080"
function main (line 11) | func main() {
function newApp (line 21) | func newApp() *iris.Application {
function handler (line 42) | func handler(ctx iris.Context) { ctx.WriteString(ctx.Path()) }
FILE: _examples/routing/sitemap/main_test.go
function TestSitemap (line 10) | func TestSitemap(t *testing.T) {
FILE: _examples/routing/subdomains/http-errors-view/main.go
function main (line 9) | func main() {
function newApp (line 13) | func newApp() *iris.Application {
function handleNotFoundTestSubdomain (line 34) | func handleNotFoundTestSubdomain(ctx iris.Context) {
function testIndex (line 43) | func testIndex(ctx iris.Context) {
FILE: _examples/routing/subdomains/http-errors-view/main_test.go
function TestSubdomainsHTTPErrorsView (line 9) | func TestSubdomainsHTTPErrorsView(t *testing.T) {
FILE: _examples/routing/subdomains/multi/main.go
function main (line 7) | func main() {
FILE: _examples/routing/subdomains/redirect/main.go
function main (line 8) | func main() {
function newApp (line 17) | func newApp() *iris.Application {
function staticIndex (line 43) | func staticIndex(ctx iris.Context) {
function index (line 47) | func index(ctx iris.Context) {
function userGet (line 51) | func userGet(ctx iris.Context) {
function userGetLogin (line 57) | func userGetLogin(ctx iris.Context) {
FILE: _examples/routing/subdomains/redirect/multi-instances/main.go
function main (line 19) | func main() {
function fallback (line 67) | func fallback(ctx iris.Context) {
FILE: _examples/routing/subdomains/redirect/multi-instances/other/server.go
function init (line 9) | func init() {
function index (line 17) | func index(ctx iris.Context) {
function handleErrors (line 22) | func handleErrors(ctx iris.Context) {
FILE: _examples/routing/subdomains/redirect/multi-instances/root/server.go
function init (line 5) | func init() {
function index (line 12) | func index(ctx iris.Context) {
FILE: _examples/routing/subdomains/single/main.go
function main (line 8) | func main() {
FILE: _examples/routing/subdomains/wildcard/main.go
function main (line 13) | func main() {
function dynamicSubdomainHandler (line 61) | func dynamicSubdomainHandler(ctx iris.Context) {
function dynamicSubdomainHandlerWithParam (line 68) | func dynamicSubdomainHandlerWithParam(ctx iris.Context) {
FILE: _examples/routing/subdomains/www/main.go
function newApp (line 5) | func newApp() *iris.Application {
function main (line 51) | func main() {
function info (line 68) | func info(ctx iris.Context) {
FILE: _examples/routing/subdomains/www/main_test.go
type testRoute (line 10) | type testRoute struct
method response (line 16) | func (r testRoute) response() string {
function TestSubdomainWWW (line 21) | func TestSubdomainWWW(t *testing.T) {
FILE: _examples/routing/subdomains/www/www-method/main.go
function newApp (line 5) | func newApp() *iris.Application {
function main (line 27) | func main() {
function info (line 44) | func info(ctx iris.Context) {
FILE: _examples/routing/versioning/main.go
function main (line 10) | func main() {
function testHandler (line 87) | func testHandler(v string) iris.Handler {
function testError (line 96) | func testError(v string) iris.Handler {
function testView (line 102) | func testView(ctx iris.Context) {
FILE: _examples/routing/writing-a-middleware/globally/main.go
function main (line 5) | func main() {
function before (line 35) | func before(ctx iris.Context) {
function after (line 45) | func after(ctx iris.Context) {
function indexHandler (line 49) | func indexHandler(ctx iris.Context) {
function contactHandler (line 62) | func contactHandler(ctx iris.Context) {
FILE: _examples/routing/writing-a-middleware/per-route/main.go
function main (line 5) | func main() {
function before (line 44) | func before(ctx iris.Context) {
function after (line 54) | func after(ctx iris.Context) {
function mainHandler (line 58) | func mainHandler(ctx iris.Context) {
FILE: _examples/routing/writing-a-middleware/share-funcs/main.go
function main (line 20) | func main() {
function newApp (line 27) | func newApp() *iris.Application {
function middleware (line 44) | func middleware(ctx iris.Context) {
function handler (line 54) | func handler(ctx iris.Context) {
function middleware2 (line 65) | func middleware2(ctx iris.Context) {
function handler2 (line 70) | func handler2(ctx iris.Context) {
function middleware3 (line 78) | func middleware3(ctx iris.Context) {
function handler3 (line 83) | func handler3(ctx iris.Context) {
function hello (line 99) | func hello(name string) string {
function sayHello (line 103) | func sayHello(ctx iris.Context, name string) {
function function3 (line 107) | func function3() {
FILE: _examples/routing/writing-a-middleware/share-funcs/main_test.go
function TestShareFuncs (line 9) | func TestShareFuncs(t *testing.T) {
FILE: _examples/routing/writing-a-middleware/share-services/main.go
function main (line 9) | func main() {
function newApp (line 16) | func newApp() *iris.Application {
function middleware (line 28) | func middleware(ctx iris.Context) {
function handler (line 37) | func handler(ctx iris.Context) {
constant serviceContextKey (line 54) | serviceContextKey = "app.service"
function setService (line 56) | func setService(ctx iris.Context, service GreetService) {
function getService (line 60) | func getService(ctx iris.Context) (GreetService, bool) {
type GreetService (line 75) | type GreetService interface
type helloService (line 79) | type helloService struct
method Greet (line 83) | func (m *helloService) Greet(name string) string {
FILE: _examples/routing/writing-a-middleware/share-services/main_test.go
function TestShareServices (line 9) | func TestShareServices(t *testing.T) {
FILE: _examples/sessions/basic/main.go
constant cookieNameForSessionID (line 9) | cookieNameForSessionID = "session_id_cookie"
function secret (line 11) | func secret(ctx iris.Context) {
function login (line 22) | func login(ctx iris.Context) {
function logout (line 32) | func logout(ctx iris.Context) {
function main (line 39) | func main() {
FILE: _examples/sessions/database/badger/main.go
function main (line 14) | func main() {
FILE: _examples/sessions/database/boltdb/main.go
function main (line 15) | func main() {
FILE: _examples/sessions/database/redis/main.go
function main (line 21) | func main() {
function getenv (line 72) | func getenv(key string, def string) string {
FILE: _examples/sessions/flash-messages/main.go
function main (line 9) | func main() {
FILE: _examples/sessions/overview/example/example.go
type BusinessModel (line 13) | type BusinessModel struct
function NewApp (line 18) | func NewApp(sess *sessions.Sessions) *iris.Application {
FILE: _examples/sessions/overview/main.go
function main (line 10) | func main() {
FILE: _examples/sessions/securecookie/main.go
function newApp (line 17) | func newApp() *iris.Application {
function main (line 35) | func main() {
FILE: _examples/sessions/securecookie/main_test.go
function TestSessionsEncodeDecode (line 10) | func TestSessionsEncodeDecode(t *testing.T) {
FILE: _examples/sessions/viewdata/main.go
function main (line 10) | func main() {
function setSessionViewData (line 25) | func setSessionViewData(ctx iris.Context) {
function index (line 31) | func index(ctx iris.Context) {
FILE: _examples/testing/ginkgotest/ginkgotest_suite_test.go
function TestGinkgotest (line 11) | func TestGinkgotest(t *testing.T) {
function newApp (line 16) | func newApp(authentication iris.Handler) *iris.Application {
function h (line 36) | func h(ctx iris.Context) {
FILE: _examples/testing/ginkgotest/main.go
function newApp (line 8) | func newApp() *iris.Application {
function h (line 35) | func h(ctx iris.Context) {
function main (line 50) | func main() {
FILE: _examples/testing/httptest/main.go
function newApp (line 8) | func newApp() *iris.Application {
function h (line 35) | func h(ctx iris.Context) {
function main (line 50) | func main() {
FILE: _examples/testing/httptest/main_test.go
function TestNewApp (line 11) | func TestNewApp(t *testing.T) {
function TestHandlerUsingNetHTTP (line 33) | func TestHandlerUsingNetHTTP(t *testing.T) {
FILE: _examples/url-shortener/factory.go
type Generator (line 10) | type Generator
type Factory (line 19) | type Factory struct
method Gen (line 33) | func (f *Factory) Gen(uri string) (key string, err error) {
function NewFactory (line 25) | func NewFactory(generator Generator, store Store) *Factory {
FILE: _examples/url-shortener/main.go
function main (line 19) | func main() {
function newApp (line 31) | func newApp(db *DB) *iris.Application {
FILE: _examples/url-shortener/main_test.go
function TestURLShortener (line 14) | func TestURLShortener(t *testing.T) {
FILE: _examples/url-shortener/store.go
type Store (line 16) | type Store interface
type DB (line 28) | type DB struct
method Set (line 73) | func (d *DB) Set(key string, value string) error {
method Clear (line 106) | func (d *DB) Clear() error {
method Get (line 115) | func (d *DB) Get(key string) (value string) {
method GetByValue (line 137) | func (d *DB) GetByValue(value string) (keys []string) {
method Len (line 159) | func (d *DB) Len() (num int) {
method Close (line 177) | func (d *DB) Close() {
function openDatabase (line 36) | func openDatabase(stumb string) *bolt.DB {
function NewDB (line 65) | func NewDB(stumb string) *DB {
FILE: _examples/view/context-view-data/main.go
constant DefaultTitle (line 10) | DefaultTitle = "My Awesome Site"
constant DefaultLayout (line 11) | DefaultLayout = "layouts/layout.html"
function main (line 14) | func main() {
FILE: _examples/view/context-view-engine/main.go
function main (line 9) | func main() {
function index (line 38) | func index(ctx iris.Context) {
function admin (line 50) | func admin(ctx iris.Context) {
function setViews (line 62) | func setViews(views iris.ViewEngine) iris.Handler {
function onFly (line 69) | func onFly(ctx iris.Context) {
FILE: _examples/view/embedding-templates-into-app-bindata/bindata.go
function bindataRead (line 22) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 42) | type asset struct
type bindataFileInfo (line 47) | type bindataFileInfo struct
method Name (line 55) | func (fi bindataFileInfo) Name() string {
method Size (line 60) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 65) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 70) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 75) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 80) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 84) | type assetFile struct
method Close (line 128) | func (f *assetFile) Close() error {
method Readdir (line 133) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 149) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 91) | type assetOperator struct
method Open (line 94) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 157) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 166) | func AssetFile() http.FileSystem {
function layoutsLayoutHtmlBytes (line 172) | func layoutsLayoutHtmlBytes() ([]byte, error) {
function layoutsLayoutHtml (line 179) | func layoutsLayoutHtml() (*asset, error) {
function layoutsMylayoutHtmlBytes (line 192) | func layoutsMylayoutHtmlBytes() ([]byte, error) {
function layoutsMylayoutHtml (line 199) | func layoutsMylayoutHtml() (*asset, error) {
function page1HtmlBytes (line 212) | func page1HtmlBytes() ([]byte, error) {
function page1Html (line 219) | func page1Html() (*asset, error) {
function partialsPage1_partial1HtmlBytes (line 232) | func partialsPage1_partial1HtmlBytes() ([]byte, error) {
function partialsPage1_partial1Html (line 239) | func partialsPage1_partial1Html() (*asset, error) {
function Asset (line 253) | func Asset(name string) ([]byte, error) {
function MustAsset (line 267) | func MustAsset(name string) []byte {
function AssetInfo (line 279) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 292) | func AssetNames() []string {
function AssetDir (line 323) | func AssetDir(name string) ([]string, error) {
type bintree (line 345) | type bintree struct
function RestoreAsset (line 362) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 387) | func RestoreAssets(dir, name string) error {
function _filePath (line 403) | func _filePath(dir, name string) string {
FILE: _examples/view/embedding-templates-into-app-bindata/main.go
function main (line 9) | func main() {
FILE: _examples/view/embedding-templates-into-app/main.go
function main (line 13) | func main() {
FILE: _examples/view/fallback/main.go
function main (line 9) | func main() {
function index (line 44) | func index(ctx iris.Context) {
FILE: _examples/view/herotemplate/app.go
function main (line 16) | func main() {
FILE: _examples/view/herotemplate/template/userlist.html.go
function UserList (line 11) | func UserList(userList []string, buffer *bytes.Buffer) {
FILE: _examples/view/herotemplate/template/userlistwriter.html.go
function UserListToWriter (line 11) | func UserListToWriter(userList []string, w io.Writer) (int, error) {
FILE: _examples/view/layout/ace/main.go
function main (line 9) | func main() {
function index (line 21) | func index(ctx iris.Context) {
FILE: _examples/view/layout/blocks/main.go
function main (line 9) | func main() {
function index (line 22) | func index(ctx iris.Context) {
FILE: _examples/view/layout/django/main.go
function main (line 9) | func main() {
function index (line 18) | func index(ctx iris.Context) {
FILE: _examples/view/layout/handlebars/main.go
function main (line 9) | func main() {
function index (line 19) | func index(ctx iris.Context) {
FILE: _examples/view/layout/html/main.go
function main (line 9) | func main() {
function index (line 19) | func index(ctx iris.Context) {
FILE: _examples/view/layout/jet/main.go
function main (line 9) | func main() {
function index (line 19) | func index(ctx iris.Context) {
FILE: _examples/view/layout/pug/main.go
function main (line 9) | func main() {
function index (line 18) | func index(ctx iris.Context) {
FILE: _examples/view/overview/main.go
function main (line 17) | func main() {
FILE: _examples/view/parse-template/django/main.go
function main (line 9) | func main() {
function index (line 27) | func index(ctx iris.Context) {
FILE: _examples/view/parse-template/handlebars/main.go
function main (line 9) | func main() {
function index (line 25) | func index(ctx iris.Context) {
FILE: _examples/view/parse-template/jet/main.go
function main (line 11) | func main() {
function index (line 30) | func index(ctx iris.Context) {
FILE: _examples/view/parse-template/main.go
function main (line 13) | func main() {
function index (line 37) | func index(ctx iris.Context) {
function layout (line 46) | func layout(ctx iris.Context) {
FILE: _examples/view/quicktemplate/controllers/execute_template.go
function ExecuteTemplate (line 10) | func ExecuteTemplate(ctx iris.Context, tmpl templates.Partial) {
FILE: _examples/view/quicktemplate/controllers/hello.go
function Hello (line 10) | func Hello(ctx iris.Context) {
FILE: _examples/view/quicktemplate/controllers/index.go
function Index (line 10) | func Index(ctx iris.Context) {
FILE: _examples/view/quicktemplate/main.go
function newApp (line 9) | func newApp() *iris.Application {
function main (line 17) | func main() {
FILE: _examples/view/quicktemplate/main_test.go
function TestResponseWriterQuicktemplate (line 10) | func TestResponseWriterQuicktemplate(t *testing.T) {
FILE: _examples/view/quicktemplate/templates/base.qtpl.go
type Partial (line 28) | type Partial interface
function StreamTemplate (line 43) | func StreamTemplate(qw422016 *qt422016.Writer, p Partial) {
function WriteTemplate (line 75) | func WriteTemplate(qq422016 qtio422016.Writer, p Partial) {
function Template (line 88) | func Template(p Partial) string {
type Base (line 108) | type Base struct
method StreamBody (line 112) | func (b *Base) StreamBody(qw422016 *qt422016.Writer) {
method WriteBody (line 121) | func (b *Base) WriteBody(qq422016 qtio422016.Writer) {
method Body (line 134) | func (b *Base) Body() string {
FILE: _examples/view/quicktemplate/templates/hello.qtpl.go
type Hello (line 28) | type Hello struct
method StreamBody (line 34) | func (h *Hello) StreamBody(qw422016 *qt422016.Writer) {
method WriteBody (line 56) | func (h *Hello) WriteBody(qq422016 qtio422016.Writer) {
method Body (line 69) | func (h *Hello) Body() string {
FILE: _examples/view/quicktemplate/templates/index.qtpl.go
type Index (line 28) | type Index struct
method StreamBody (line 32) | func (i *Index) StreamBody(qw422016 *qt422016.Writer) {
method WriteBody (line 46) | func (i *Index) WriteBody(qq422016 qtio422016.Writer) {
method Body (line 59) | func (i *Index) Body() string {
FILE: _examples/view/templ/hello_templ.go
function hello (line 13) | func hello(name string) templ.Component {
FILE: _examples/view/templ/main.go
function main (line 10) | func main() {
FILE: _examples/view/template_ace_0/main.go
function main (line 9) | func main() {
FILE: _examples/view/template_blocks_0/main.go
function main (line 9) | func main() {
function index (line 20) | func index(ctx iris.Context) {
function internalServerError (line 32) | func internalServerError(ctx iris.Context) {
FILE: _examples/view/template_blocks_1_embedded/bindata.go
function bindataRead (line 23) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 43) | type asset struct
type bindataFileInfo (line 48) | type bindataFileInfo struct
method Name (line 56) | func (fi bindataFileInfo) Name() string {
method Size (line 61) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 66) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 71) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 76) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 81) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 85) | type assetFile struct
method Close (line 129) | func (f *assetFile) Close() error {
method Readdir (line 134) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 150) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 92) | type assetOperator struct
method Open (line 95) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 158) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 167) | func AssetFile() http.FileSystem {
function _500HtmlBytes (line 173) | func _500HtmlBytes() ([]byte, error) {
function _500Html (line 180) | func _500Html() (*asset, error) {
function indexHtmlBytes (line 193) | func indexHtmlBytes() ([]byte, error) {
function indexHtml (line 200) | func indexHtml() (*asset, error) {
function layoutsErrorHtmlBytes (line 213) | func layoutsErrorHtmlBytes() ([]byte, error) {
function layoutsErrorHtml (line 220) | func layoutsErrorHtml() (*asset, error) {
function layoutsMainHtmlBytes (line 233) | func layoutsMainHtmlBytes() ([]byte, error) {
function layoutsMainHtml (line 240) | func layoutsMainHtml() (*asset, error) {
function partialsFooterHtmlBytes (line 253) | func partialsFooterHtmlBytes() ([]byte, error) {
function partialsFooterHtml (line 260) | func partialsFooterHtml() (*asset, error) {
function Asset (line 274) | func Asset(name string) ([]byte, error) {
function MustAsset (line 288) | func MustAsset(name string) []byte {
function AssetInfo (line 300) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 313) | func AssetNames() []string {
function AssetDir (line 345) | func AssetDir(name string) ([]string, error) {
type bintree (line 367) | type bintree struct
function RestoreAsset (line 385) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 410) | func RestoreAssets(dir, name string) error {
function _filePath (line 426) | func _filePath(dir, name string) string {
FILE: _examples/view/template_blocks_1_embedded/main.go
function main (line 19) | func main() {
function index (line 29) | func index(ctx iris.Context) {
function internalServerError (line 41) | func internalServerError(ctx iris.Context) {
FILE: _examples/view/template_blocks_2/main.go
function main (line 6) | func main() {
function initApp (line 11) | func initApp() *iris.Application {
FILE: _examples/view/template_django_0/main.go
function main (line 14) | func main() {
function hi (line 32) | func hi(ctx iris.Context) {
FILE: _examples/view/template_django_1/main.go
function main (line 9) | func main() {
function writePathHandler (line 66) | func writePathHandler(ctx iris.Context) {
FILE: _examples/view/template_handlebars_0/main.go
function main (line 10) | func main() {
type controller (line 73) | type controller struct
method Get (line 75) | func (c *controller) Get() mvc.Result {
FILE: _examples/view/template_html_0/main.go
function main (line 9) | func main() {
function hi (line 32) | func hi(ctx iris.Context) {
FILE: _examples/view/template_html_1/main.go
type mypage (line 9) | type mypage struct
function main (line 14) | func main() {
FILE: _examples/view/template_html_2/main.go
function main (line 9) | func main() {
FILE: _examples/view/template_html_3/main.go
function main (line 11) | func main() {
function writePathHandler (line 68) | func writePathHandler(ctx iris.Context) {
FILE: _examples/view/template_html_4/main.go
constant host (line 12) | host = "127.0.0.1:8080"
function main (line 15) | func main() {
function emptyHandler (line 72) | func emptyHandler(ctx iris.Context) {
FILE: _examples/view/template_html_5/main.go
function main (line 9) | func main() {
FILE: _examples/view/template_jet_0/main.go
type tTODO (line 18) | type tTODO struct
method Render (line 60) | func (t *tTODO) Render(r *view.JetRuntime) {
type doneTODOs (line 23) | type doneTODOs struct
method New (line 30) | func (dt *doneTODOs) New(todos map[string]*tTODO) *doneTODOs {
method Range (line 41) | func (dt *doneTODOs) Range() (reflect.Value, reflect.Value, bool) {
method ProvidesIndex (line 53) | func (dt *doneTODOs) ProvidesIndex() bool { return true }
method Render (line 55) | func (dt *doneTODOs) Render(r *view.JetRuntime) {
function main (line 68) | func main() {
FILE: _examples/view/template_jet_1_embedded/bindata.go
function bindataRead (line 22) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 42) | type asset struct
type bindataFileInfo (line 47) | type bindataFileInfo struct
method Name (line 55) | func (fi bindataFileInfo) Name() string {
method Size (line 60) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 65) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 70) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 75) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 80) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 84) | type assetFile struct
method Close (line 128) | func (f *assetFile) Close() error {
method Readdir (line 133) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 149) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 91) | type assetOperator struct
method Open (line 94) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 157) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 166) | func AssetFile() http.FileSystem {
function includes_partialJetBytes (line 172) | func includes_partialJetBytes() ([]byte, error) {
function includes_partialJet (line 179) | func includes_partialJet() (*asset, error) {
function includesBlocksJetBytes (line 192) | func includesBlocksJetBytes() ([]byte, error) {
function includesBlocksJet (line 199) | func includesBlocksJet() (*asset, error) {
function indexJetBytes (line 212) | func indexJetBytes() ([]byte, error) {
function indexJet (line 219) | func indexJet() (*asset, error) {
function layoutsApplicationJetBytes (line 232) | func layoutsApplicationJetBytes() ([]byte, error) {
function layoutsApplicationJet (line 239) | func layoutsApplicationJet() (*asset, error) {
function Asset (line 253) | func Asset(name string) ([]byte, error) {
function MustAsset (line 267) | func MustAsset(name string) []byte {
function AssetInfo (line 279) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 292) | func AssetNames() []string {
function AssetDir (line 323) | func AssetDir(name string) ([]string, error) {
type bintree (line 345) | type bintree struct
function RestoreAsset (line 362) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 387) | func RestoreAssets(dir, name string) error {
function _filePath (line 403) | func _filePath(dir, name string) string {
FILE: _examples/view/template_jet_1_embedded/main.go
function main (line 20) | func main() {
FILE: _examples/view/template_jet_2/main.go
function main (line 10) | func main() {
function writePathHandler (line 67) | func writePathHandler(ctx iris.Context) {
function writePathHandlerPage5 (line 71) | func writePathHandlerPage5(ctx iris.Context) {
FILE: _examples/view/template_jet_3/main.go
function main (line 12) | func main() {
type ViewBuiler (line 36) | type ViewBuiler struct
method Asset (line 39) | func (ViewBuiler) Asset(a view.JetArguments) reflect.Value {
method Style (line 45) | func (ViewBuiler) Style(a view.JetArguments) reflect.Value {
method Script (line 51) | func (ViewBuiler) Script(a view.JetArguments) reflect.Value {
FILE: _examples/view/template_pug_0/main.go
type Person (line 10) | type Person struct
type Job (line 17) | type Job struct
function main (line 22) | func main() {
function index (line 34) | func index(ctx iris.Context) {
FILE: _examples/view/template_pug_1/main.go
function main (line 10) | func main() {
function index (line 27) | func index(ctx iris.Context) {
FILE: _examples/view/template_pug_2_embedded/bindata.go
function bindataRead (line 20) | func bindataRead(data []byte, name string) ([]byte, error) {
type asset (line 40) | type asset struct
type bindataFileInfo (line 45) | type bindataFileInfo struct
method Name (line 53) | func (fi bindataFileInfo) Name() string {
method Size (line 58) | func (fi bindataFileInfo) Size() int64 {
method Mode (line 63) | func (fi bindataFileInfo) Mode() os.FileMode {
method ModTime (line 68) | func (fi bindataFileInfo) ModTime() time.Time {
method IsDir (line 73) | func (fi bindataFileInfo) IsDir() bool {
method Sys (line 78) | func (fi bindataFileInfo) Sys() any {
type assetFile (line 82) | type assetFile struct
method Close (line 126) | func (f *assetFile) Close() error {
method Readdir (line 131) | func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
method Stat (line 147) | func (f *assetFile) Stat() (os.FileInfo, error) {
type assetOperator (line 89) | type assetOperator struct
method Open (line 92) | func (f *assetOperator) Open(name string) (http.File, error) {
function newDirFileInfo (line 155) | func newDirFileInfo(name string) os.FileInfo {
function AssetFile (line 164) | func AssetFile() http.FileSystem {
function indexPugBytes (line 170) | func indexPugBytes() ([]byte, error) {
function indexPug (line 177) | func indexPug() (*asset, error) {
function layoutPugBytes (line 190) | func layoutPugBytes() ([]byte, error) {
function layoutPug (line 197) | func layoutPug() (*asset, error) {
function Asset (line 211) | func Asset(name string) ([]byte, error) {
function MustAsset (line 225) | func MustAsset(name string) []byte {
function AssetInfo (line 237) | func AssetInfo(name string) (os.FileInfo, error) {
function AssetNames (line 250) | func AssetNames() []string {
function AssetDir (line 279) | func AssetDir(name string) ([]string, error) {
type bintree (line 301) | type bintree struct
function RestoreAsset (line 312) | func RestoreAsset(dir, name string) error {
function RestoreAssets (line 337) | func RestoreAssets(dir, name string) error {
function _filePath (line 353) | func _filePath(dir, name string) string {
FILE: _examples/view/template_pug_2_embedded/main.go
function main (line 15) | func main() {
function index (line 28) | func index(ctx iris.Context) {
FILE: _examples/view/write-to/main.go
type mailData (line 9) | type mailData struct
function main (line 16) | func main() {
FILE: _examples/webassembly/client/go-wasm-runtime.js
method getRandomValues (line 14) | getRandomValues(b) {
method now (line 20) | now() {
method writeSync (line 35) | writeSync(fd, buf) {
method openSync (line 44) | openSync(path, flags, mode) {
method constructor (line 56) | constructor() {
method run (line 321) | async run(instance) {
FILE: _examples/webassembly/client/hello_go116.go
function main (line 12) | func main() {
FILE: _examples/webassembly/main.go
function main (line 12) | func main() {
FILE: _examples/websocket/basic/browserify/app.js
function addMessage (line 21) | function addMessage(msg) {
function handleError (line 25) | function handleError(reason) {
function handleNamespaceConnectedConn (line 30) | function handleNamespaceConnectedConn(nsConn) {
function runExample (line 46) | async function runExample() {
FILE: _examples/websocket/basic/browserify/bundle.js
function d (line 1) | function d(s,e,n){function f(u,i){if(!e[u]){if(!s[u]){var t="function"==...
function n (line 1) | function n(e){t.innerHTML+=e+"\n"}
function d (line 1) | function d(e){console.log(e),window.alert(e)}
function i (line 1) | function i(e){e.emit("chat","Hello from browser(ify) client-side!");cons...
function f (line 1) | async function f(){try{const e=await u.dial(a,{default:{_OnNamespaceConn...
function i (line 1) | function i(e,n,d){return n<=e&&e<=d}
function f (line 1) | function f(e,n){return-1!==e.indexOf(n)}
function u (line 1) | function u(e){if(e===void 0)return{};if(e===Object(e))return e;throw Typ...
function o (line 1) | function o(e){for(var f=e+"",o=f.length,n=0,s=[];n<o;){var u=f.charCodeA...
function s (line 1) | function s(e){for(var n=String.fromCharCode,d="",f=0,u;f<e.length;++f)u=...
function a (line 1) | function a(e){return 0<=e&&127>=e}
function t (line 1) | function t(e){this.tokens=[].slice.call(e),this.tokens.reverse()}
function r (line 1) | function r(e,n){if(e)throw TypeError("Decoder error");return n||65533}
function c (line 1) | function c(e){throw TypeError("The code point "+e+" could not be encoded...
function l (line 1) | function l(e){return e=(e+"").trim().toLowerCase(),Object.prototype.hasO...
function p (line 1) | function p(e,n){return n?n[e]||null:null}
function m (line 1) | function m(e,n){var d=n.indexOf(e);return-1===d?null:d}
function g (line 1) | function g(e){if(!("encoding-indexes"in d))throw Error("Indexes missing....
function h (line 1) | function h(e){if(39419<e&&189e3>e||1237575<e)return null;if(7457===e)ret...
function y (line 1) | function y(e){if(59335===e)return 7457;var n=0,d=0,f=g("gb18030-ranges")...
function w (line 1) | function w(e){$=$||g("jis0208").map(function(e,n){return i(n,8272,8835)?...
function _ (line 1) | function _(e){Y=Y||g("big5").map(function(e,n){return n<5024?null:e});va...
function b (line 1) | function b(e,n){if(!(this instanceof b))throw TypeError("Called as a fun...
function E (line 1) | function E(e,n){if(!(this instanceof E))throw TypeError("Called as a fun...
function v (line 1) | function v(e){var n=e.fatal,d=0,f=0,u=0,o=128,s=191;this.handler=functio...
function O (line 1) | function O(e){e.fatal;this.handler=function(e,n){if(n===-1)return-1;if(z...
function I (line 1) | function I(e,n){var d=n.fatal;this.handler=function(n,i){if(i===-1)retur...
function k (line 1) | function k(e,n){n.fatal;this.handler=function(n,d){if(-1===d)return-1;if...
function x (line 1) | function x(e){var n=e.fatal,d=0,f=0,u=0;this.handler=function(e,o){if(o=...
function N (line 1) | function N(e,n){e.fatal;this.handler=function(e,d){if(d===-1)return-1;if...
function C (line 1) | function C(e){var n=e.fatal,d=0;this.handler=function(e,f){if(-1===f&&0!...
function R (line 1) | function R(e){e.fatal;this.handler=function(e,n){if(n===-1)return-1;if(z...
function S (line 1) | function S(e){var n=e.fatal,d=!1,f=0;this.handler=function(e,u){if(-1===
Condensed preview — 1261 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,556K chars).
[
{
"path": ".deepsource.toml",
"chars": 240,
"preview": "version = 1\n\ntest_patterns = [\"**/*_test.go\"]\n\nexclude_patterns = [\n \"_examples/**\",\n \"_benchmarks/**\",\n \".gith"
},
{
"path": ".fossa.yml",
"chars": 214,
"preview": "version: 3\ncli:\n server: https://app.fossa.com\n fetcher: git\n package: github.com/kataras/iris\n project: github.com/"
},
{
"path": ".gitattributes",
"chars": 462,
"preview": "*.go linguist-language=Go\n_examples/* linguist-documentation\n_benchmarks/* linguist-documentation\ngo.sum linguist-genera"
},
{
"path": ".github/CODEOWNERS",
"chars": 89,
"preview": "# These owners will be the default owners for everything in the repo.\r\n* @kataras\r\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 355,
"preview": "# patreon: # Replace with a single Patreon username\n# open_collective: # Replace with a single Open Collective username\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 763,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[BUG]\"\nlabels: type:bug\nassignees: kataras\n\n---\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/custom.md",
"chars": 136,
"preview": "---\nname: Custom issue template\nabout: Other\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\nDescribe the issue you are facing "
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 624,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: \"[FEATURE REQUEST]\"\nlabels: type:idea\nassignees"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 391,
"preview": "Examples for the Iris project can be found at\r\n<https://github.com/kataras/iris/tree/main/_examples>.\r\n\r\nDocumentation f"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 280,
"preview": "# We'd love to see more contributions\r\n\r\nRead how you can [contribute to the project](https://github.com/kataras/iris/bl"
},
{
"path": ".github/dependabot.yml",
"chars": 248,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"gomod\"\n directory: \"/\"\n exclude-paths:\n - \"_examples/\"\n schedu"
},
{
"path": ".github/scripts/setup_examples_test.bash",
"chars": 329,
"preview": "#!/usr/bin/env bash\n\nfor f in ../../_examples/*; do\n if [ -d \"$f\" ]; then\n # Will not run if no directories ar"
},
{
"path": ".github/workflows/ci.yml",
"chars": 765,
"preview": "name: CI\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n\npermissions:\n contents: read\n\njobs:\n\n "
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 2584,
"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": ".gitignore",
"chars": 171,
"preview": ".idea\n.vscode\n.directory\ncoverage.out\npackage-lock.json\naccess.log\nnode_modules\nissue-*/\ninternalcode-*/\n/_examples/feat"
},
{
"path": "AUTHORS",
"chars": 122,
"preview": "# This is the official list of Iris authors for copyright\r\n# purposes.\r\n\r\nGerasimos Maropoulos <kataras2006@hotmail.com>"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3303,
"preview": "# Contributor Covenant Code of Conduct\r\n\r\n## Our Pledge\r\n\r\nIn the interest of fostering an open and welcoming environmen"
},
{
"path": "CONTRIBUTING.md",
"chars": 1544,
"preview": "# Contributing\r\n\r\nFirst of all read our [Code of Conduct](https://github.com/kataras/iris/blob/main/CODE_OF_CONDUCT.md)."
},
{
"path": "FAQ.md",
"chars": 2420,
"preview": "# FAQ\n\n## [](https://github.com/kataras"
},
{
"path": "HISTORY.md",
"chars": 82527,
"preview": "# Changelog\r\n\r\n### Looking for free and real-time support?\r\n\r\n https://github.com/kataras/iris/issues\r\n https://ch"
},
{
"path": "LICENSE",
"chars": 1570,
"preview": "BSD 3-Clause License\r\n\r\nCopyright (c) 2016-2026, Gerasimos (Makis) Maropoulos\r\nAll rights reserved.\r\n\r\nRedistribution an"
},
{
"path": "NOTICE",
"chars": 8822,
"preview": "================================================================================\n\n Third-Party S"
},
{
"path": "README.md",
"chars": 98643,
"preview": "<!--<h1><img width=\"24\" height=\"25\" src =\"https://www.iris-go.com/images/logo-new-lq-45.png\"/> News</h1>\n\n Iris version "
},
{
"path": "README_AR.md",
"chars": 96429,
"preview": "أعزائي أعضاء مجتمع Iris,\n\nقد تكون قد لاحظت تراجعًا مؤخرًا في مستوى النشاط على مستودع Iris، ولكن هذا الهدوء له غاية مقصود"
},
{
"path": "README_ES.md",
"chars": 4110,
"preview": "# Iris Web Framework\n\n[ یا اگر ب"
},
{
"path": "README_FR.md",
"chars": 4564,
"preview": "# Iris Web Framework\n\n[](https://support.eji.org/give"
},
{
"path": "README_RU.md",
"chars": 4419,
"preview": "# Iris Web Framework\n\n[](https://support.eji.org/give/153413/#!/donat"
},
{
"path": "README_ZH_HANT.md",
"chars": 10325,
"preview": "<!-- [](https://support.eji.org/give/153413/#!/"
},
{
"path": "SECURITY.md",
"chars": 718,
"preview": "# Security Policy\n\n## Supported Versions\n\nWe are focusing on fixing issues and security vulnerabilities to the latest an"
},
{
"path": "VERSION",
"chars": 52,
"preview": "v12.2.0:https://github.com/kataras/iris/tree/v12.2.0"
},
{
"path": "_benchmarks/README.md",
"chars": 132,
"preview": "# Benchmarks\r\n\r\n- [HTTP/2 Benchmarks](https://github.com/kataras/server-benchmarks#benchmarks)\r\n- [View Engine Benchmark"
},
{
"path": "_benchmarks/view/README.md",
"chars": 2352,
"preview": "# View Engine Benchmarks\n\nBenchmark between all 7 supported template parsers.\n\nAce and Pug parsers minifies the template"
},
{
"path": "_benchmarks/view/ace/main.go",
"chars": 568,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\t// By default Ace eng"
},
{
"path": "_benchmarks/view/ace/views/index.ace",
"chars": 38,
"preview": "h1 Index Body\nh3 Message: {{.Message}}"
},
{
"path": "_benchmarks/view/ace/views/layouts/main.ace",
"chars": 122,
"preview": "= doctype html\nhtml\n head\n title {{.Title}}\n body\n {{ yield . }}\n footer\n = include partials/footer.ace "
},
{
"path": "_benchmarks/view/ace/views/partials/footer.ace",
"chars": 36,
"preview": "h3 Footer Partial\nh4 {{.FooterText}}"
},
{
"path": "_benchmarks/view/blocks/main.go",
"chars": 618,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.RegisterView(iris"
},
{
"path": "_benchmarks/view/blocks/views/index.html",
"chars": 49,
"preview": "<h1>Index Body</h1><h3>Message: {{.Message}}</h3>"
},
{
"path": "_benchmarks/view/blocks/views/layouts/main.html",
"chars": 155,
"preview": "<!DOCTYPE html><html><head><title>{{.Title}}</title></head><body>{{ template \"content\" . }}<footer>{{ partial \"partials/"
},
{
"path": "_benchmarks/view/blocks/views/partials/footer.html",
"chars": 47,
"preview": "<h3>Footer Partial</h3><h4>{{.FooterText}}</h4>"
},
{
"path": "_benchmarks/view/django/main.go",
"chars": 623,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.RegisterView(iris"
},
{
"path": "_benchmarks/view/django/views/index.html",
"chars": 114,
"preview": "{% extends \"layouts/main.html\" %}{% block content %}<h1>Index Body</h1><h3>Message: {{Message}}</h3>{% endblock %}"
},
{
"path": "_benchmarks/view/django/views/layouts/main.html",
"chars": 168,
"preview": "<!DOCTYPE html><html><head><title>{{Title}}</title></head><body>{% block content %} {% endblock %}<footer>{% include \".."
},
{
"path": "_benchmarks/view/django/views/partials/footer.html",
"chars": 46,
"preview": "<h3>Footer Partial</h3><h4>{{FooterText}}</h4>"
},
{
"path": "_benchmarks/view/handlebars/main.go",
"chars": 499,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.RegisterView(iris"
},
{
"path": "_benchmarks/view/handlebars/views/index.html",
"chars": 48,
"preview": "<h1>Index Body</h1><h3>Message: {{Message}}</h3>"
},
{
"path": "_benchmarks/view/handlebars/views/layouts/main.html",
"chars": 144,
"preview": "<!DOCTYPE html><html><head><title>{{Title}}</title></head><body>{{ yield . }}<footer>{{ render \"partials/footer.html\" .}"
},
{
"path": "_benchmarks/view/handlebars/views/partials/footer.html",
"chars": 46,
"preview": "<h3>Footer Partial</h3><h4>{{FooterText}}</h4>"
},
{
"path": "_benchmarks/view/html/main.go",
"chars": 494,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\n\tapp.RegisterView(iri"
},
{
"path": "_benchmarks/view/html/views/index.html",
"chars": 49,
"preview": "<h1>Index Body</h1><h3>Message: {{.Message}}</h3>"
},
{
"path": "_benchmarks/view/html/views/layouts/main.html",
"chars": 146,
"preview": "<!DOCTYPE html><html><head><title>{{.Title}}</title></head><body>{{ yield . }}<footer>{{ render \"partials/footer.html\" ."
},
{
"path": "_benchmarks/view/html/views/partials/footer.html",
"chars": 47,
"preview": "<h3>Footer Partial</h3><h4>{{.FooterText}}</h4>"
},
{
"path": "_benchmarks/view/jet/main.go",
"chars": 616,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.RegisterView(iris"
},
{
"path": "_benchmarks/view/jet/views/index.jet",
"chars": 119,
"preview": "{{ extends \"../layouts/main.jet\" }}{{ block documentBody() }}<h1>Index Body</h1><h3>Message: {{.Message}}</h3>{{ end }}"
},
{
"path": "_benchmarks/view/jet/views/layouts/main.jet",
"chars": 162,
"preview": "<!DOCTYPE html><html><head><title>{{.Title}}</title></head><body>{{ yield documentBody() }}<footer>{{ include \"../partia"
},
{
"path": "_benchmarks/view/jet/views/partials/footer.jet",
"chars": 47,
"preview": "<h3>Footer Partial</h3><h4>{{.FooterText}}</h4>"
},
{
"path": "_benchmarks/view/pug/main.go",
"chars": 668,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\t// Ace engine minifie"
},
{
"path": "_benchmarks/view/pug/views/index.pug",
"chars": 82,
"preview": "extends layouts/main.pug\n\nblock content\n h1 Index Body\n h3 Message: {{.Message}}"
},
{
"path": "_benchmarks/view/pug/views/layouts/main.pug",
"chars": 118,
"preview": "doctype html\nhtml\n head\n title {{.Title}}\n body\n block content\n footer\n include ../partials/footer.pug"
},
{
"path": "_benchmarks/view/pug/views/partials/footer.pug",
"chars": 36,
"preview": "h3 Footer Partial\nh4 {{.FooterText}}"
},
{
"path": "_benchmarks/view/tests.yml",
"chars": 682,
"preview": "- Name: Template Layout, Partial and Data\n Description: >\n Fires {{.NumberOfRequests}} requests with {{.NumberOfConne"
},
{
"path": "_examples/README.md",
"chars": 17705,
"preview": "# Table of Contents <a href=\"./README_ZH_HANT.md\"> <img width=\"20px\" src=\"https://iris-go.com/static/images/flag-china.s"
},
{
"path": "_examples/README_ZH_HANT.md",
"chars": 15423,
"preview": "# 章節目錄\n\n- [無伺服器 (Serverless)](https://github.com/iris-contrib/gateway#netlify)\n- [適用 Apache Kafka 的 REST API](kafka-api)"
},
{
"path": "_examples/apidoc/swagger/README.md",
"chars": 70,
"preview": "# Swagger 2.0\n\nVisit https://github.com/iris-contrib/swagger instead.\n"
},
{
"path": "_examples/auth/auth/README.md",
"chars": 290,
"preview": "# Auth Package (+ Single Sign On)\n\n```sh\n$ go run .\n```\n\n1. GET/POST: http://localhost:8080/signin\n2. GET: http://localh"
},
{
"path": "_examples/auth/auth/auth.yml",
"chars": 1421,
"preview": "Headers: # required.\n - \"Authorization\"\n - \"X-Authorization\"\nCookie: # optional.\n Name: \"iris_auth_cookie\"\n Secure: "
},
{
"path": "_examples/auth/auth/main.go",
"chars": 3768,
"preview": "//go:build go1.18\n// +build go1.18\n\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/i"
},
{
"path": "_examples/auth/auth/user.go",
"chars": 498,
"preview": "//go:build go1.18\n// +build go1.18\n\npackage main\n\ntype AccessRole uint16\n\nfunc (r AccessRole) Is(v AccessRole) bool {\n\tr"
},
{
"path": "_examples/auth/auth/user_provider.go",
"chars": 2403,
"preview": "//go:build go1.18\n// +build go1.18\n\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/kataras/iris/"
},
{
"path": "_examples/auth/auth/views/layouts/main.html",
"chars": 722,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width"
},
{
"path": "_examples/auth/auth/views/partials/footer.html",
"chars": 37,
"preview": "<i>Iris Web Framework © 2022</i>"
},
{
"path": "_examples/auth/auth/views/signin.html",
"chars": 317,
"preview": "<div class=\"user_signin\">\n <form action=\"\" method=\"post\">\n <label for=\"username\">Email:</label>\n <input"
},
{
"path": "_examples/auth/basicauth/basic/main.go",
"chars": 2118,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/x/errors\"\n\n\t\"github.com/kataras/iris"
},
{
"path": "_examples/auth/basicauth/basic/main_test.go",
"chars": 993,
"preview": "package main\n\nimport (\n\t\"testing\"\n\n\t\"github.com/kataras/iris/v12/httptest\"\n)\n\nfunc TestBasicAuth(t *testing.T) {\n\tapp :="
},
{
"path": "_examples/auth/basicauth/database/Dockerfile",
"chars": 362,
"preview": "# docker build -t myapp . \n# docker run --rm -it -p 8080:8080 myapp:latest\nFROM golang:latest AS builder\nRUN apt-get upd"
},
{
"path": "_examples/auth/basicauth/database/README.md",
"chars": 840,
"preview": "# BasicAuth + MySQL & Docker Example\n\n## ⚡ Get Started\n\nDownload the folder.\n\n### Install (Docker)\n\nInstall [Docker](htt"
},
{
"path": "_examples/auth/basicauth/database/docker-compose.yml",
"chars": 711,
"preview": "version: '3.1'\n\nservices:\n db:\n image: mysql\n command: --default-authentication-plugin=mysql_native_password\n "
},
{
"path": "_examples/auth/basicauth/database/go.mod",
"chars": 2494,
"preview": "module myapp\n\ngo 1.25\n\nrequire (\n\tgithub.com/go-sql-driver/mysql v1.9.3\n\tgithub.com/kataras/iris/v12 v12.2.11-0.20251225"
},
{
"path": "_examples/auth/basicauth/database/go.sum",
"chars": 17550,
"preview": "filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=\nfilippo.io/edwards25519 v1.1.0/go.mod h1:"
},
{
"path": "_examples/auth/basicauth/database/main.go",
"chars": 2599,
"preview": "package main // Look README.md\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"githu"
},
{
"path": "_examples/auth/basicauth/database/migration/db.sql",
"chars": 543,
"preview": "CREATE DATABASE IF NOT EXISTS myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n\nUSE myapp;\n\nSET NAMES utf"
},
{
"path": "_examples/auth/basicauth/users_file_bcrypt/main.go",
"chars": 550,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/basicauth\"\n)\n\nfunc main()"
},
{
"path": "_examples/auth/basicauth/users_file_bcrypt/users.yml",
"chars": 566,
"preview": "# The file cannot be modified during the serve time.\n# To support real-time users changes please use the Options.Allow i"
},
{
"path": "_examples/auth/basicauth/users_list/main.go",
"chars": 1542,
"preview": "package main\n\nimport (\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/basicauth\"\n)\n\n//"
},
{
"path": "_examples/auth/cors/main.go",
"chars": 1784,
"preview": "// Package main integrates the \"rs/cors\" net/http middleware into Iris.\n// That cors third-party middleware cannot be re"
},
{
"path": "_examples/auth/cors/public/index.html",
"chars": 344,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-widt"
},
{
"path": "_examples/auth/cors/public/main.js",
"chars": 1674,
"preview": "// https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\nasync function doRequest(method = 'GET', url ="
},
{
"path": "_examples/auth/goth/main.go",
"chars": 16208,
"preview": "package main\n\n// Any OAuth2 (even the pure golang/x/net/oauth2) package\n// can be used with iris but at this example we "
},
{
"path": "_examples/auth/goth/templates/index.html",
"chars": 127,
"preview": "{{range $key,$value:=.Providers}}\n <p><a href=\"/auth/{{$value}}\">Log in with {{index $.ProvidersMap $value}}</a></p>\n"
},
{
"path": "_examples/auth/goth/templates/user.html",
"chars": 546,
"preview": "<p><a href=\"/logout/{{.Provider}}\">logout</a></p>\n<p>Name: {{.Name}} [{{.LastName}}, {{.FirstName}}]</p>\n<p>Email: {{.Em"
},
{
"path": "_examples/auth/hcaptcha/hosts",
"chars": 155,
"preview": "# https://docs.hcaptcha.com/#localdev\n# Add to the end of your hosts file, e.g. on windows: C:/windows/system32/drivers/"
},
{
"path": "_examples/auth/hcaptcha/main.go",
"chars": 1242,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/hcaptcha\"\n)"
},
{
"path": "_examples/auth/hcaptcha/templates/register_form.html",
"chars": 444,
"preview": "<html>\n\n<head>\n <title>hCaptcha Demo</title>\n <script src=\"https://hcaptcha.com/1/api.js\" async defer></script>\n</head"
},
{
"path": "_examples/auth/jwt/basic/main.go",
"chars": 1922,
"preview": "package main\n\nimport (\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/jwt\"\n)\n\n/*\nDocum"
},
{
"path": "_examples/auth/jwt/blocklist/main.go",
"chars": 2410,
"preview": "package main\n\nimport (\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/jwt\"\n\t\"github.co"
},
{
"path": "_examples/auth/jwt/middleware/main.go",
"chars": 2641,
"preview": "package main\n\nimport (\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/jwt\"\n)\n\nvar (\n\ts"
},
{
"path": "_examples/auth/jwt/refresh-token/main.go",
"chars": 6076,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/jwt\"\n)\n\nc"
},
{
"path": "_examples/auth/jwt/refresh-token/rsa_private_key.pem",
"chars": 1667,
"preview": "-----BEGIN PRIVATE KEY-----\nMIIEowIBAAKCAQEArwO0q8WbBvrplz3lTQjsWu66HC7M3mVAjmjLq8Wj/ipqVtiJ\nMrUL9t/0q9PNO/KX9u+HayFNYM4"
},
{
"path": "_examples/auth/jwt/refresh-token/rsa_public_key.pem",
"chars": 451,
"preview": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwO0q8WbBvrplz3lTQjs\nWu66HC7M3mVAjmjLq8Wj/ipqVtiJ"
},
{
"path": "_examples/auth/jwt/tutorial/README.md",
"chars": 1282,
"preview": "# Iris JWT Tutorial\n\nThis example show how to use JWT with domain-driven design pattern with Iris. There is also a simpl"
},
{
"path": "_examples/auth/jwt/tutorial/api/auth.go",
"chars": 3363,
"preview": "package api\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"myapp/domain/model\"\n\t\"myapp/domain/repository\"\n\t\"myapp/util\"\n\n\t\"github.com"
},
{
"path": "_examples/auth/jwt/tutorial/api/router.go",
"chars": 670,
"preview": "package api\n\nimport (\n\t\"myapp/domain/repository\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\n// NewRouter accepts some dependenci"
},
{
"path": "_examples/auth/jwt/tutorial/api/todo.go",
"chars": 2756,
"preview": "package api\n\nimport (\n\t\"errors\"\n\t\"myapp/domain/repository\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\n// TodoRequest represents "
},
{
"path": "_examples/auth/jwt/tutorial/domain/model/role.go",
"chars": 136,
"preview": "package model\n\n// Role represents a role.\ntype Role string\n\nconst (\n\t// Admin represents the Admin access role.\n\tAdmin R"
},
{
"path": "_examples/auth/jwt/tutorial/domain/model/todo.go",
"chars": 256,
"preview": "package model\n\n// Todo represents the Todo model.\ntype Todo struct {\n\tID string `json:\"id\"`\n\tUserID string `js"
},
{
"path": "_examples/auth/jwt/tutorial/domain/model/user.go",
"chars": 219,
"preview": "package model\n\n// User represents our User model.\ntype User struct {\n\tID string `json:\"id\"`\n\tUsername "
},
{
"path": "_examples/auth/jwt/tutorial/domain/repository/samples.go",
"chars": 991,
"preview": "package repository\n\nimport (\n\t\"fmt\"\n\n\t\"myapp/domain/model\"\n)\n\n// GenerateSamples generates data samples.\nfunc GenerateSa"
},
{
"path": "_examples/auth/jwt/tutorial/domain/repository/todo_repository.go",
"chars": 2028,
"preview": "package repository\n\nimport (\n\t\"errors\"\n\t\"sync\"\n\n\t\"myapp/domain/model\"\n\t\"myapp/util\"\n)\n\n// ErrNotFound indicates that an "
},
{
"path": "_examples/auth/jwt/tutorial/domain/repository/user_repository.go",
"chars": 2090,
"preview": "package repository\n\nimport (\n\t\"sync\"\n\n\t\"myapp/domain/model\"\n\t\"myapp/util\"\n)\n\n// UserRepository is responsible for User C"
},
{
"path": "_examples/auth/jwt/tutorial/go-client/README.md",
"chars": 592,
"preview": "# Go Client\n\n```sh\n$ go run .\n```\n\n```sh\n2020/11/04 21:08:40 Access Token:\n\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2V"
},
{
"path": "_examples/auth/jwt/tutorial/go-client/client.go",
"chars": 2812,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Client "
},
{
"path": "_examples/auth/jwt/tutorial/go-client/main.go",
"chars": 1317,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"myapp/api\"\n\t\"myapp/domain/model\"\n)\n\nconst base = \"http://"
},
{
"path": "_examples/auth/jwt/tutorial/go.mod",
"chars": 2431,
"preview": "module myapp\n\ngo 1.25\n\nrequire (\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/kataras/iris/v12 v12.2.11-0.20251225090712-3"
},
{
"path": "_examples/auth/jwt/tutorial/go.sum",
"chars": 17371,
"preview": "github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=\ngithub.com/BurntSushi/toml v1.6.0/go.m"
},
{
"path": "_examples/auth/jwt/tutorial/main.go",
"chars": 663,
"preview": "package main\n\nimport (\n\t\"myapp/api\"\n\t\"myapp/domain/repository\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nvar (\n\tuserRepo = repo"
},
{
"path": "_examples/auth/jwt/tutorial/util/app.go",
"chars": 96,
"preview": "package util\n\n// Constants for the application.\nconst (\n\tVersion = \"0.0.1\"\n\tAppName = \"myapp\"\n)\n"
},
{
"path": "_examples/auth/jwt/tutorial/util/clock.go",
"chars": 161,
"preview": "package util\n\nimport \"time\"\n\n// Now is the default current time for the whole application.\n// Can be modified for testin"
},
{
"path": "_examples/auth/jwt/tutorial/util/password.go",
"chars": 719,
"preview": "package util\n\nimport \"golang.org/x/crypto/bcrypt\"\n\n// MustGeneratePassword same as GeneratePassword but panics on errors"
},
{
"path": "_examples/auth/jwt/tutorial/util/uuid.go",
"chars": 379,
"preview": "package util\n\nimport \"github.com/google/uuid\"\n\n// MustGenerateUUID returns a new v4 UUID or panics.\nfunc MustGenerateUUI"
},
{
"path": "_examples/auth/permissions/main.go",
"chars": 3805,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/kataras/iris/v12\"\n\n\tpermissions \"github.com/xyproto/permis"
},
{
"path": "_examples/auth/recaptcha/custom_form/main.go",
"chars": 1021,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n\n\t\"github.com/kataras/iris/v12/middleware/recaptcha\"\n)\n\n//"
},
{
"path": "_examples/auth/recaptcha/main.go",
"chars": 919,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware/recaptcha\"\n)\n\n// keys sho"
},
{
"path": "_examples/bootstrapper/bootstrap/bootstrapper.go",
"chars": 3213,
"preview": "package bootstrap\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/gorilla/securecookie\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github."
},
{
"path": "_examples/bootstrapper/go.mod",
"chars": 4129,
"preview": "module github.com/kataras/iris/v12/_examples/bootstrapper\n\ngo 1.25\n\nrequire (\n\tgithub.com/gorilla/securecookie v1.1.2\n\tg"
},
{
"path": "_examples/bootstrapper/go.sum",
"chars": 22524,
"preview": "github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=\ngithub.com/BurntSushi/toml v1.6.0/go.m"
},
{
"path": "_examples/bootstrapper/main.go",
"chars": 468,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12/_examples/bootstrapper/bootstrap\"\n\t\"github.com/kataras/iris/v12/_ex"
},
{
"path": "_examples/bootstrapper/main_test.go",
"chars": 913,
"preview": "package main\n\nimport (\n\t\"testing\"\n\n\t\"github.com/kataras/iris/v12/httptest\"\n)\n\n// go test -v\nfunc TestApp(t *testing.T) {"
},
{
"path": "_examples/bootstrapper/middleware/identity/identity.go",
"chars": 884,
"preview": "package identity\n\nimport (\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\n\t\"github.com/kataras/iris/v12/_examples/bootstrapper"
},
{
"path": "_examples/bootstrapper/routes/follower.go",
"chars": 266,
"preview": "package routes\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\n// GetFollowerHandler handles the GET: /follower/{id}\nfunc Ge"
},
{
"path": "_examples/bootstrapper/routes/following.go",
"chars": 269,
"preview": "package routes\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\n// GetFollowingHandler handles the GET: /following/{id}\nfunc "
},
{
"path": "_examples/bootstrapper/routes/index.go",
"chars": 297,
"preview": "package routes\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\n// GetIndexHandler handles the GET: /\nfunc GetIndexHa"
},
{
"path": "_examples/bootstrapper/routes/like.go",
"chars": 254,
"preview": "package routes\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\n// GetLikeHandler handles the GET: /like/{id}\nfunc GetLikeHan"
},
{
"path": "_examples/bootstrapper/routes/routes.go",
"chars": 370,
"preview": "package routes\n\nimport (\n\t\"github.com/kataras/iris/v12/_examples/bootstrapper/bootstrap\"\n)\n\n// Configure registers the n"
},
{
"path": "_examples/bootstrapper/views/index.html",
"chars": 18,
"preview": "<h1>Welcome!!</h1>"
},
{
"path": "_examples/bootstrapper/views/shared/error.html",
"chars": 166,
"preview": "<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n<h3>"
},
{
"path": "_examples/bootstrapper/views/shared/layout.html",
"chars": 479,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, init"
},
{
"path": "_examples/caddy/Caddyfile",
"chars": 174,
"preview": "example.com {\n\theader / Server \"Iris\"\n\tproxy / example.com:9091 # localhost:9091\n}\n\napi.example.com {\n\theader / Server \""
},
{
"path": "_examples/caddy/README.md",
"chars": 1190,
"preview": "# Caddy loves Iris\n\nThe `Caddyfile` shows how you can use caddy to listen on ports 80 & 443 and sit in front of iris web"
},
{
"path": "_examples/caddy/server1/main.go",
"chars": 1181,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/mvc\"\n)\n\nfunc main() {\n\tapp := iris.N"
},
{
"path": "_examples/caddy/server1/views/index.html",
"chars": 29,
"preview": "<div>\n {{.Message}}\n</div>"
},
{
"path": "_examples/caddy/server1/views/shared/layout.html",
"chars": 102,
"preview": "<html>\n\n<head>\n <title>{{.Layout.Title}}</title>\n</head>\n\n<body>\n {{ yield . }}\n</body>\n\n</html>"
},
{
"path": "_examples/caddy/server2/main.go",
"chars": 1666,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/mvc\"\n)\n\ntype postValue func(string) "
},
{
"path": "_examples/compression/client/main.go",
"chars": 1820,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n)\n\nvar client = http.DefaultC"
},
{
"path": "_examples/compression/client-using-iris/main.go",
"chars": 2116,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/kataras/iris/v12/context\"\n)\n\ncon"
},
{
"path": "_examples/compression/main.go",
"chars": 1330,
"preview": "package main\n\nimport \"github.com/kataras/iris/v12\"\n\nfunc main() {\n\tapp := newApp()\n\tapp.Logger().SetLevel(\"debug\")\n\tapp."
},
{
"path": "_examples/compression/main_test.go",
"chars": 1864,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/ka"
},
{
"path": "_examples/configuration/from-configuration-structure/main.go",
"chars": 838,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.Get(\"/\", func(ctx iris.Co"
},
{
"path": "_examples/configuration/from-toml-file/configs/iris.tml",
"chars": 301,
"preview": "DisablePathCorrection = false\r\nEnablePathEscape = false\r\nFireMethodNotAllowed = true\r\nDisableBodyConsumptionOnUnmarshal "
},
{
"path": "_examples/configuration/from-toml-file/main.go",
"chars": 475,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\n\tapp.Get(\"/\", func(ctx iris.C"
},
{
"path": "_examples/configuration/from-yaml-file/configs/iris.yml",
"chars": 365,
"preview": "DisablePathCorrection: false\r\nEnablePathEscape: false\r\nFireMethodNotAllowed: true\r\nDisableBodyConsumptionOnUnmarshal: tr"
},
{
"path": "_examples/configuration/from-yaml-file/main.go",
"chars": 674,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.Get(\"/\", func(ctx iris.Co"
},
{
"path": "_examples/configuration/from-yaml-file/shared-configuration/main.go",
"chars": 540,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.Get(\"/\", func(ctx iris.Co"
},
{
"path": "_examples/configuration/functional/main.go",
"chars": 566,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.Get(\"/\", func(ctx iris.Co"
},
{
"path": "_examples/configuration/multi-environments/README.md",
"chars": 187,
"preview": "# Environment-based Configuration\n\n## Run production server\n\n```sh\n$ go run main.go --config=server.yml\n```\n\n## Run deve"
},
{
"path": "_examples/configuration/multi-environments/api/configuration.go",
"chars": 602,
"preview": "package api\n\nimport (\n\t\"os\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"gopkg.in/yaml.v3\"\n)\n\ntype Configuration struct {\n\tHost "
},
{
"path": "_examples/configuration/multi-environments/api/server.go",
"chars": 2554,
"preview": "package api\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/kataras/iris/v12\"\n\t\"github.com/kataras/iris/v12/middleware"
},
{
"path": "_examples/configuration/multi-environments/cmd/root_command.go",
"chars": 1226,
"preview": "package cmd\n\nimport (\n\t\"github.com/kataras/my-iris-app/api\"\n\n\t\"github.com/spf13/cobra\"\n)\n\nconst defaultConfigFilename = "
},
{
"path": "_examples/configuration/multi-environments/go.mod",
"chars": 2556,
"preview": "module github.com/kataras/my-iris-app\n\ngo 1.25\n\nrequire (\n\tgithub.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b"
},
{
"path": "_examples/configuration/multi-environments/go.sum",
"chars": 17901,
"preview": "github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=\ngithub.com/BurntSushi/toml v1.6.0/go.m"
},
{
"path": "_examples/configuration/multi-environments/main.go",
"chars": 186,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/kataras/my-iris-app/cmd\"\n)\n\nfunc main() {\n\tapp := cmd.New()\n\tif err :="
},
{
"path": "_examples/configuration/multi-environments/server.dev.yml",
"chars": 386,
"preview": "ServerName: \"my-iris-app\"\n\nHost: 0.0.0.0\nPort: 8080\nEnableCompression: false\nAllowOrigin: \"*\"\n\n# Your development enviro"
},
{
"path": "_examples/configuration/multi-environments/server.yml",
"chars": 340,
"preview": "Host: 0.0.0.0\nPort: 80\nEnableCompression: true\nAllowOrigin: \"*\"\n\n# Your production's database connection configuration h"
},
{
"path": "_examples/configuration/viper/config/config.go",
"chars": 1327,
"preview": "package config\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/kataras/iris/v12\"\n\t// Viper is a third-party package:\n\t// go get github.co"
},
{
"path": "_examples/configuration/viper/config.yml",
"chars": 1186,
"preview": "Addr:\n Internal:\n IP: 127.0.0.1\n Plain: 8080\n Secure: 443\nLocale:\n Pattern: \"./locales/*/*.ini\"\n Default: \"e"
},
{
"path": "_examples/configuration/viper/go.mod",
"chars": 2858,
"preview": "module app\n\ngo 1.25\n\nrequire (\n\tgithub.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd\n\tgithub.com/spf13/vip"
},
{
"path": "_examples/configuration/viper/go.sum",
"chars": 19046,
"preview": "github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=\ngithub.com/BurntSushi/toml v1.6.0/go.m"
},
{
"path": "_examples/configuration/viper/main.go",
"chars": 328,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"app/config\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tapp.Ge"
},
{
"path": "_examples/convert-handlers/negroni-like/main.go",
"chars": 1030,
"preview": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tirisMiddleware :"
},
{
"path": "_examples/convert-handlers/nethttp/main.go",
"chars": 595,
"preview": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\tirisMiddleware :"
},
{
"path": "_examples/convert-handlers/nethttp/wrapper/main.go",
"chars": 1022,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := iris.New()\n\n\thttp"
},
{
"path": "_examples/convert-handlers/real-usecase-raven/wrapping-the-router/main.go",
"chars": 1112,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"runtime/debug\"\n\n\t\"github.com/kataras/iris/v12\"\n\n\t\"github.com/getse"
},
{
"path": "_examples/convert-handlers/real-usecase-raven/writing-middleware/main.go",
"chars": 1735,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime/debug\"\n\n\t\"github.com/kataras/iris/v12\"\n\n\t\"github.com/getsentry/raven-g"
},
{
"path": "_examples/cookies/basic/main.go",
"chars": 1823,
"preview": "package main\n\nimport \"github.com/kataras/iris/v12\"\n\nfunc newApp() *iris.Application {\n\tapp := iris.New()\n\n\t// Set A Cook"
},
{
"path": "_examples/cookies/basic/main_test.go",
"chars": 968,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/kataras/iris/v12/httptest\"\n)\n\nfunc TestCookiesBasic(t *testing.T)"
},
{
"path": "_examples/cookies/options/main.go",
"chars": 2323,
"preview": "package main\n\nimport (\n\t\"github.com/kataras/iris/v12\"\n)\n\nfunc main() {\n\tapp := newApp()\n\n\t// http://localhost:8080/set/n"
},
{
"path": "_examples/cookies/options/main_test.go",
"chars": 995,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/kataras/iris/v12/httptest\"\n)\n\nfunc TestCookieOptions(t *testing.T"
},
{
"path": "_examples/cookies/securecookie/main.go",
"chars": 1467,
"preview": "package main\n\n// developers can use any library to add a custom cookie encoder/decoder.\n// At this example we use the go"
},
{
"path": "_examples/cookies/securecookie/main_test.go",
"chars": 1131,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/kataras/iris/v12/httptest\"\n)\n\nfunc TestSecureCookie(t *testing.T)"
},
{
"path": "_examples/database/mongodb/Dockerfile",
"chars": 349,
"preview": "# docker build -t myapp . \n# docker run --rm -it -p 8080:8080 myapp:latest\nFROM golang:latest AS builder\nRUN apt-get upd"
},
{
"path": "_examples/database/mongodb/README.md",
"chars": 1177,
"preview": "# Build RESTful API with the official MongoDB Go Driver and Iris \n\nArticle is coming soon, follow and stay tuned\n\n- <htt"
},
{
"path": "_examples/database/mongodb/api/store/movie.go",
"chars": 2107,
"preview": "package storeapi\n\nimport (\n\t\"myapp/httputil\"\n\t\"myapp/store\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\ntype MovieHandler struct "
},
{
"path": "_examples/database/mongodb/docker-compose.yml",
"chars": 263,
"preview": "version: \"3.1\"\n\nservices:\n app:\n build: .\n environment: \n Port: 8080\n DSN: db:27017\n ports:\n - "
},
{
"path": "_examples/database/mongodb/env/env.go",
"chars": 1972,
"preview": "package env\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/joho/godotenv\"\n)\n\nvar (\n\t// Port is "
},
{
"path": "_examples/database/mongodb/go.mod",
"chars": 2781,
"preview": "module myapp\n\ngo 1.25\n\nrequire (\n\tgithub.com/joho/godotenv v1.5.1\n\tgithub.com/kataras/iris/v12 v12.2.11-0.20251225090712"
},
{
"path": "_examples/database/mongodb/go.sum",
"chars": 19914,
"preview": "github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=\ngithub.com/BurntSushi/toml v1.6.0/go.m"
},
{
"path": "_examples/database/mongodb/httputil/error.go",
"chars": 3806,
"preview": "package httputil\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"time\"\n\n\t\"gi"
},
{
"path": "_examples/database/mongodb/main.go",
"chars": 1889,
"preview": "package main\n\n// go get -u go.mongodb.org/mongo-driver\n// go get -u github.com/joho/godotenv\n\nimport (\n\t\"context\"\n\t\"flag"
},
{
"path": "_examples/database/mongodb/store/movie.go",
"chars": 4115,
"preview": "package store\n\nimport (\n\t\"context\"\n\t\"errors\"\n\n\t\"go.mongodb.org/mongo-driver/bson\"\n\t\"go.mongodb.org/mongo-driver/bson/pri"
},
{
"path": "_examples/database/mysql/Dockerfile",
"chars": 349,
"preview": "# docker build -t myapp . \n# docker run --rm -it -p 8080:8080 myapp:latest\nFROM golang:latest AS builder\nRUN apt-get upd"
},
{
"path": "_examples/database/mysql/README.md",
"chars": 6379,
"preview": "# Iris, MySQL, Groupcache & Docker Example\n\n## 📘 Endpoints\n\n| Method | Path | Description | UR"
},
{
"path": "_examples/database/mysql/api/api.go",
"chars": 2485,
"preview": "// Package api contains the handlers for our HTTP Endpoints.\npackage api\n\nimport (\n\t\"time\"\n\n\t\"myapp/service\"\n\t\"myapp/sql"
},
{
"path": "_examples/database/mysql/api/category_handler.go",
"chars": 6544,
"preview": "package api\n\nimport (\n\t\"myapp/entity\"\n\t\"myapp/service\"\n\t\"myapp/sql\"\n\n\t\"github.com/kataras/iris/v12\"\n)\n\n// CategoryHandle"
}
]
// ... and 1061 more files (download for full content)
About this extraction
This page contains the full source code of the kataras/iris GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1261 files (4.9 MB), approximately 1.4M tokens, and a symbol index with 6051 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.