{"id":37205745,"url":"https://github.com/openstruct/goeasycli","last_synced_at":"2026-01-14T23:42:07.296Z","repository":{"id":248575903,"uuid":"821107374","full_name":"OpenStruct/goeasycli","owner":"OpenStruct","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-31T00:40:31.000Z","size":7819,"stargazers_count":7,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-08-01T02:37:10.485Z","etag":null,"topics":["api","echo-framework","fiber-framework","gin-framework","go","golang","golang-cli","restful-api"],"latest_commit_sha":null,"homepage":"https://openstruct.github.io/goeasycli/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenStruct.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-27T20:36:25.000Z","updated_at":"2024-07-31T00:40:13.000Z","dependencies_parsed_at":"2024-07-31T02:13:45.187Z","dependency_job_id":null,"html_url":"https://github.com/OpenStruct/goeasycli","commit_stats":null,"previous_names":["openstruct/goeasycli"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/OpenStruct/goeasycli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenStruct%2Fgoeasycli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenStruct%2Fgoeasycli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenStruct%2Fgoeasycli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenStruct%2Fgoeasycli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenStruct","download_url":"https://codeload.github.com/OpenStruct/goeasycli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenStruct%2Fgoeasycli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28439517,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T22:37:52.437Z","status":"ssl_error","status_checked_at":"2026-01-14T22:37:31.496Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","echo-framework","fiber-framework","gin-framework","go","golang","golang-cli","restful-api"],"created_at":"2026-01-14T23:42:06.578Z","updated_at":"2026-01-14T23:42:07.284Z","avatar_url":"https://github.com/OpenStruct.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\r\n  \u003cimg referrerpolicy=\"no-referrer-when-downgrade\" src=\"https://avatars.githubusercontent.com/u/174039470?s=96\u0026v=4\" /\u003e\r\n  \u003ch1 align=\"center\"\u003eBootstrap your next Go project/library easily.\r\n\u003c/h1\u003e\r\n\u003c/div\u003e\r\n\r\n\u003c!-- PROJECT SHIELDS --\u003e\r\n\u003c!--\r\n*** I'm using markdown \"reference style\" links for readability.\r\n*** Reference links are in brackets [ ] instead of parentheses ( ).\r\n*** See the bottom of this document for the declaration of the reference variables\r\n*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.\r\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\r\n--\u003e\r\n\r\n[![language][languages-shield]](https://golang.org)\r\n![OS][os-shield]\r\n[![Golang][releases]][repo-url]\r\n![GitHub release date][release-date]\r\n![GitHub last commit][last-commit]\r\n[![Golang][project-download]][downloads-url]\r\n![Contributors][contributors-shield]\r\n[![License][license-shield]][license-url]\r\n\r\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\r\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\r\n\r\n[releases]: https://img.shields.io/github/v/release/OpenStruct/goeasycli\r\n[repo-url]: https://github.com/OpenStruct/goeasycli\r\n[GitHub-Version-shield]: https://img.shields.io/github/v/release/OpenStruct/goeasycli\r\n[project-download]: https://img.shields.io/github/downloads/OpenStruct/goeasycli/total\r\n[downloads-url]: https://img.shields.io/github/downloads/OpenStruct/goeasycli/total\r\n[contributors-shield]: https://img.shields.io/github/contributors/OpenStruct/goeasycli?color=7A3EF4\r\n[license-shield]: https://img.shields.io/github/license/OpenStruct/goeasycli?color=9565F6\r\n[codecov-shield]: https://img.shields.io/codecov/c/github/OpenStruct/goeasycli\r\n[codecov-url]: https://codecov.io/gh/OpenStruct/goeasycli\r\n[license-url]: https://opensource.org/licenses/MIT\r\n[languages-shield]: https://img.shields.io/badge/language-go-blue.svg\r\n[os-shield]: https://img.shields.io/badge/OS-linux%2C%20windows%2C%20macOS-0078D4\r\n[release-date]: https://img.shields.io/github/release-date/OpenStruct/goeasycli\r\n[last-commit]: https://img.shields.io/github/last-commit/OpenStruct/goeasycli\r\n\r\n---\r\n\r\n## List of Contents\r\n\r\n- [🔑 Prerequisites](#-prerequisites)\r\n- [🤸 Quickstart](#-quickstart)\r\n- [🪄 Simple and fast project setup](#-simple-and-fast-project-setup)\r\n- [😺 API Documentation](#-api-documentation)\r\n- [🏛️ Folder Structure](#-folder-structure)\r\n- [🙁 Posible Issues](#-posible-issues)\r\n- [📚 Creating a Library](#-creating-a-library)\r\n- [🗺 Roadmap](#-roadmap)\r\n- [🥺 Uninstalling GoEasyCLI](#-uninstalling-goeasycli)\r\n- [🙌 Contributing and Community](#-contributing-and-community)\r\n- [⭐️ Show Your Support](#-show-your-support)\r\n- [📜 License](#-license)\r\n\r\n---\r\n\r\n## 🔑 Prerequisites\r\n\r\nTo use GoEasyCLI, you **need** to have the following tools installed on your system:\r\n\r\n- [Go](https://golang.org/dl/) **1.19 or newer**\r\n- [Git](https://git-scm.com/downloads)\r\n\r\n## 🤸 Quickstart\r\n\r\nInstall GoEasyCLI with the following command:\r\n\r\n### Unix-like Systems (Linux, macOS)\r\n\r\n```bash\r\nsh -c \"$(curl -fsSL https://raw.githubusercontent.com/OpenStruct/goeasycli/main/scripts/install.sh)\"\r\n```\r\n\r\n### Windows\r\n\r\n\u003e **_NOTE:_** Please run Powershell in administrator mode.\r\n\r\n```powershell\r\npowershell -c \"irm https://raw.githubusercontent.com/OpenStruct/goeasycli/main/scripts/install.ps1 | iex\"\r\n```\r\n\r\nCheck available options by running:\r\n\r\n```bash\r\ngoeasycli --help\r\n```\r\n\r\n## 🪄 Simple and fast project setup\r\n\r\nGoEasyCLI is a command-line interface that automates project creation and setup tasks for Go projects. It streamlines the process of setting up the project structure, installing dependencies, and configuring initial settings, making it easier to start with Go.\r\n\r\n### Create a new project with specified options\r\n\r\n```bash\r\ngoeasycli -p \u003cproject_name\u003e -f {gin, fiber, echo}\r\n```\r\n\r\nReplace `\u003cproject_name\u003e` with your desired project name.\r\n\r\n**Supported frameworks:**\r\n\r\n- [x] [Gin](https://gin-gonic.com)\r\n- [x] [Fiber](https://gofiber.io)\r\n- [x] [Echo](https://echo.labstack.com)\r\n\r\nHere's an example:\r\n\r\n```bash\r\ngoeasycli -p fafa_shop_api -f fiber\r\n```\r\n\r\nThis command creates a new Go project named `fafa_shop_api` using the Fiber web framework.\r\n\r\nThe next step is to run your new project:\r\n\r\n```bash\r\ngo run .\r\n```\r\n\r\n## 😺 API Documentation\r\n\r\nAfter running the project, you can explore and interact with the API using Postman. To get started quickly, import our pre-configured API requests by clicking the button below:\r\n\r\n[\u003cimg src=\"https://run.pstmn.io/button.svg\" alt=\"Run In Postman\" style=\"width: 128px; height: 32px;\"\u003e](https://god.gw.postman.com/run-collection/28835299-b86cba8e-57e5-4e0d-81be-9acbc3fc6fcc?action=collection%2Ffork\u0026source=rip_markdown\u0026collection-url=entityId%3D28835299-b86cba8e-57e5-4e0d-81be-9acbc3fc6fcc%26entityType%3Dcollection%26workspaceId%3D23eb7893-79ca-41ef-96ae-c11a9551cd0c)\r\n\r\n\u003e Remember to change the port to match your SERVER_PORT. Default is set to **8080**\r\n\r\nThis Postman collection contains all available endpoints with example requests, making it easy to test and understand the API's functionality.\r\n\r\n---\r\n\r\n## 🗂️ Folder Structure\r\n\r\nAfter using GoEasyCLI to create a project, the folder structure will be as follows:\r\n\r\n```shell\r\n└── 📁fafa_shop_api\r\n    └── .env\r\n    └── .gitignore\r\n    └── 📁config\r\n        └── config.go\r\n    └── 📁controllers\r\n        └── health.go\r\n        └── user.go\r\n    └── 📁database\r\n        └── database.go\r\n    └── go.mod\r\n    └── go.sum\r\n    └── 📁loggers\r\n        └── sentry.go\r\n        └── zap.go\r\n    └── main.go\r\n    └── 📁middlewares\r\n        └── middlewares.go\r\n    └── 📁models\r\n        └── user.go\r\n    └── 📁routers\r\n        └── health.go\r\n        └── routers.go\r\n        └── user.go\r\n    └── 📁seeds\r\n        └── seed.go\r\n    └── 📁structs\r\n        └── structs.go\r\n    └── 📁templates\r\n        └── templates.go\r\n    └── test_database.db\r\n    └── 📁utils\r\n        └── responses.go\r\n        └── utils.go\r\n```\r\n\r\nThis structure provides a solid foundation for your Go project, organized into common directories for configuration, controllers, database handling, logging, middleware, models, routes, templates, seeds, and utilities.\r\n\r\n## 🏛️ Folder Structure Details\r\n\r\n### config\r\n\r\nThe `config` folder contains the configuration settings for the project.\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003econfig.go\u003c/summary\u003e\r\n\r\nIt initializes the configuration settings, loads the environment variables, and sets the default values for the configuration settings.\r\n\r\nYou can add more configuration settings to this file as needed.\r\n\r\n\u003c/details\u003e\r\n\r\n### controllers\r\n\r\nThe `controllers` folder contains the controller files for the project. The controller files handle the project's business logic.\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003ehealth.go\u003c/summary\u003e\r\n\r\nIt contains the health check controller, which returns the status of the application.\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003euser.go\u003c/summary\u003e\r\n\r\nIt contains a sample user controller, which handles basic CRUD operations for users.\r\n\r\n\u003c/details\u003e\r\n\r\n### database\r\n\r\nThe `database` folder contains the project's db configuration and connection settings.\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003edatabase.go\u003c/summary\u003e\r\n\r\nIt sets up the database connection and initializes the database.\r\n\r\nIt contains the database migration logic to create the required tables.\r\nBy default, the project uses a SQLite database. You can change the database settings in this file and the .env file to use a different database.\r\n\r\n\u003c/details\u003e\r\n\r\n### loggers\r\n\r\nThe `loggers` folder contains the logger configuration settings for the project. The project uses two loggers: Zap and Sentry.\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003ezap.go\u003c/summary\u003e\r\n\r\nIt initializes the Zap logger, which logs messages to the console.\r\n\r\nYou can customize the logger to log messages to a file or a different output.\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003esentry.go\u003c/summary\u003e\r\n\r\nIt initializes the Sentry logger, which sends error messages to the Sentry service.\r\n\r\nYou can configure the Sentry logger with your Sentry DSN to send error messages to your Sentry account.\r\n\r\n\u003c/details\u003e\r\n\r\n### middlewares\r\n\r\nThe `middlewares` folder contains the middleware settings for the project.\r\n\r\n### models\r\n\r\nThe `models` folder contains the model files for the project. The model files define the database schema for the project.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003euser.go\u003c/summary\u003e\r\n\r\nIt contains the user model, which defines the sample user schema.\r\n\r\nYou can add more model files to define additional database schemas for the project.\r\n\r\n\u003c/details\u003e\r\n\r\n### routes\r\n\r\nThe `routes` folder contains the route files for the project. The route files define the API routes for the project.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003ehealth.go\u003c/summary\u003e\r\n\r\nIt contains the health check route, which returns the application status.\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003erouters.go\u003c/summary\u003e\r\n\r\nIt initializes the router and registers the API routes for the project.\r\nOther route files are registered in this file.\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003euser.go\u003c/summary\u003e\r\n\r\nIt contains the sample user routes, which define the API routes for basic CRUD operations on users.\r\n\r\n\u003c/details\u003e\r\n\r\n### structs\r\n\r\nThe `structs` folder contains the struct files for the project. The struct files define the data structures used in the project.\r\n\r\n### seeds\r\n\r\nThe `seeds` folder contains the seed files for the project. The seed files populate the database with sample data.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eseeds.go\u003c/summary\u003e\r\n\r\nIt contains the seed logic to populate the database with sample users.\r\nYou can comment out the seed logic to avoid populating the database with sample data.\r\n\r\n\u003c/details\u003e\r\n\r\n### templates\r\n\r\nThe `templates` folder contains the template files for the project. The template files define the HTML templates used in the project.\r\nSometimes, you may need to render HTML templates or send emails with HTML content. In such cases, you can use the template files in this folder.\r\n\r\n### utils\r\n\r\nThe `utils` folder contains the utility files for the project. The utility files contain helper functions and utility functions used in the project.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eresponses.go\u003c/summary\u003e\r\n\r\nIt contains the response utility functions to send JSON responses to the client.\r\nYou can customize the response functions to handle different response formats or error messages.\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eutils.go\u003c/summary\u003e\r\n\r\nIt contains the project's utility functions.\r\nUtility functions perform common tasks such as string manipulation and data validation.\r\n\r\n\u003c/details\u003e\r\n\r\n## 🙁 Posible Issues\r\n\r\n### Error: `Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub.`\r\n\r\n```bash\r\n2024/07/17 15:10:42 C:/WINDOWS/system32/justGo/database/database.go:66\r\n[error] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub\r\nfailed to connect database\r\nDatabase connection is nil. cannot run migration\r\npanic: runtime error: invalid memory address or nil pointer dereference\r\n[signal 0xc0000005 code=0x0 addr=0x28 pc=0x13e4992]\r\n```\r\n\r\nThis error is caused by the project using `SQLite` as the default database.\r\nTo fix this issue, you need to:\r\n\r\n1. Run this command in your `cmd` or `powershell`:\r\n\r\n```bash\r\ngo env -w CGO_ENABLED=1\r\n```\r\n\r\n2.  Download a [tdm-gcc](https://jmeubank.github.io/tdm-gcc) for your architecture and install it.\r\n\r\n\u003e During installation, select `TDM-GCC Recommend, All Packages` from the Choose Components Screen. See Screenshot below\r\n\u003e\r\n\u003e ![TDM-GCC Setup](https://github.com/user-attachments/assets/44b06ab8-8f94-4b21-82bb-ba4b0c1f1cec)\r\n\r\n## 📚 Creating a Library\r\n\r\nGoEasyCLI can also be used to create a Go library. To create a new library, use the following command:\r\n\r\n```bash\r\ngoeasycli -l \u003clibrary_name\u003e -r repo_url\r\n```\r\n\r\nReplace `\u003clibrary_name\u003e` with your desired library name and `repo_url` with the repository's URL.\r\n\r\nHere's an example:\r\n\r\n```bash\r\ngoeasycli -l my_awesome_fafa_lib -r https://github.com/heygoeasycli/my_awesome_fafa_lib\r\n```\r\n\r\nThis command creates a new Go library named `my_awesome_fafa_lib` with the specified repository URL.\r\n\r\nThe folder structure for the library will be as follows:\r\n\r\n```shell\r\n└── 📁my_awesome_fafa_lib\r\n    └── .github\r\n        └── goeasycli_tag.yml\r\n    └── config\r\n        └── config.go\r\n    └── database\r\n        └── database.go\r\n    └── email\r\n        └── emails.go\r\n    └── loggers\r\n        └── zap.go\r\n    └── go.mod\r\n    └── go.sum\r\n```\r\n\r\n## 🗺 Roadmap\r\n\r\nGoEasyCLI is being built in public. The [roadmap](https://github.com/OpenStruct/goeasycli/issues) is a regularly updated source of truth for the GoEasyCLI community to understand where the product is going in the short, medium, and long term.\r\n\r\nGoEasyCLI is managed by [Open Struct](https://github.com/OpenStruct), a group with the aim of easing the burden of engineers. On our GitHub repo, you can directly influence the roadmap by [Creating an issue](https://github.com/OpenStruct/goeasycli/issues/new/choose).\r\n\r\n## 🥺 Uninstalling GoEasyCLI\r\n\r\nNeed to say goodbye? We understand. Here's how to remove GoEasyCLI from your system. Use either of these commands in your terminal:\r\n\r\n```bash\r\ngoeasycli -u\r\ngoeasycli uninstall\r\n```\r\n\r\n## 🙌 Contributing and Community\r\n\r\nWe would love to develop GoEasyCLI together with our community! The best way to get started is to select any issue from the [repo](https://github.com/OpenStruct/goeasycli/issues) and open a Pull Request!\r\n\r\n### Contributors\r\n\r\n\u003ca href=\"https://github.com/OpenStruct/goeasycli/graphs/contributors\"\u003e\r\n  \u003cimg src=\"https://contrib.rocks/image?repo=OpenStruct/goeasycli\" /\u003e\r\n\u003c/a\u003e\r\n\r\n## ⭐️ Show Your Support\r\n\r\nIf you find GoEasyCLI helpful or interesting, please consider giving us a star on GitHub. Your support helps promote the project and lets others know it's worth checking out.\r\n\r\nThank you for being so supportive! 🌟\r\n\r\n[![Star this project](https://img.shields.io/github/stars/OpenStruct/goeasycli?style=social)](https://github.com/OpenStruct/goeasycli/stargazers)\r\n\r\n## 📜 License\r\n\r\nGoEasyCLI is distributed under the terms of the MIT License.\r\nA complete version of the license is available in the [LICENSE](LICENSE) file in\r\nthis repository. Any contribution made to this project will be licensed under the MIT License.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstruct%2Fgoeasycli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenstruct%2Fgoeasycli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstruct%2Fgoeasycli/lists"}