{"id":19769267,"url":"https://github.com/pinkhello/go-starter","last_synced_at":"2025-04-30T17:31:02.110Z","repository":{"id":42183269,"uuid":"345076812","full_name":"pinkhello/go-starter","owner":"pinkhello","description":"Go 服务框架脚手架. 整合 echo、swag、viper、nsq、logrus、fx、xorm、cobra 等第三方库","archived":false,"fork":false,"pushed_at":"2022-07-13T10:57:29.000Z","size":110,"stargazers_count":162,"open_issues_count":0,"forks_count":29,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-06T03:33:33.668Z","etag":null,"topics":["cobra","echo","echo-swagger","fx","github-actions","golangci-lint","logrus","nsq","swag","swagger","viper","xorm","xormplus"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinkhello.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-06T11:28:32.000Z","updated_at":"2025-04-01T08:29:45.000Z","dependencies_parsed_at":"2022-09-09T01:40:22.212Z","dependency_job_id":null,"html_url":"https://github.com/pinkhello/go-starter","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinkhello%2Fgo-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinkhello%2Fgo-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinkhello%2Fgo-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinkhello%2Fgo-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinkhello","download_url":"https://codeload.github.com/pinkhello/go-starter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251751110,"owners_count":21637862,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cobra","echo","echo-swagger","fx","github-actions","golangci-lint","logrus","nsq","swag","swagger","viper","xorm","xormplus"],"created_at":"2024-11-12T04:42:11.200Z","updated_at":"2025-04-30T17:31:01.771Z","avatar_url":"https://github.com/pinkhello.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-starter ![](https://img.shields.io/github/stars/pinkhello/go-starter?color=0088ff) ![](https://img.shields.io/github/forks/pinkhello/go-starter?color=0088ff) ![](https://img.shields.io/github/issues/pinkhello/go-starter?color=0088ff)\n\n## github activity\n\n[![Stargazers repo roster for @pinkhello/go-starter](https://reporoster.com/stars/pinkhello/go-starter)](https://github.com/pinkhello/go-starter/stargazers)\n\n[![Stargazers over time](https://starchart.cc/pinkhello/go-starter.svg)](https://starchart.cc/pinkhello/go-starter)\n\n\n## Demo\nDemo: [房产CRM](http://121.4.242.26) \n- url: http://121.4.242.26 (test/123456)。\n- BE [go-starter](https://github.com/pinkhello/go-starter)\n- FE [ant-design-vue-pro](https://pro.antdv.com/)\n\n\n\n\n## thirdparty\n- [X] Github Actions\n- [X] Custom Logger [logrus](https://github.com/sirupsen/logrus)\n- [X] CLI Command [cobra](https://github.com/spf13/cobra)\n- [X] Configuration [viper](https://github.com/spf13/viper)\n- [X] Web [echo](https://github.com/labstack/echo)\n- [X] DI/IOC [fx](https://github.com/uber-go/fx)\n- [X] ORM [xorm](https://github.com/go-xorm/xorm)\n- [X] Swagger generator [swag](https://github.com/swaggo/swag) [echo-swagger](https://github.com/swaggo/echo-swagger)\n- [X] Messaging [NSQ](https://github.com/nsqio/nsq)\n- [X] golangci-lint [golangci-lint](https://github.com/golangci/golangci-lint)\n- [ ] Migrate [migrate](https://github.com/golang-migrate/migrate)\n- [ ] ......\n\n## code layer\n```shell\n   - app        # application main\n     - cmd\n     - ... \n   - config       # config\n   - deploy       # ci/cd\n     - mysql      # mysql docker-compose\n     - nsq        # nsq docker-compose\n     - ...        # other     \n   - docs         # swag gen swagger2.0 doc\n   - internal     # core \n     - controller # http handler（controller）\n     - http       # http sever startup\n     - lib        # lib\n     - models     # models\n     - nsq        # nsq producer \u0026 nsq consumer startup\n     - repository # repository \n     - service    # service\n   - utils        # util\n     - ... \n   - ...\n```\n\n## Build \u0026 Publish \u0026 Deploy\n\n### swag tips\n```shell\n\u003e swag init -g app/main.go\n```\n`swagger url: http://{IP}:{PORT}/swagger/index.html`\n\n### build\n- local\n    ```shell\n    \u003e cd .\n    \u003e docker build . --file deploy/Dockerfile --tag {ImageTag}\n    ```\n- github action \n  ```shell\n  \u003e { secrets.ACCESS_USERNAME }: `your docker hub username`\n  ```\n\n### be deploy\n1. `docker network`:`go_starter_network`\n    ```shell\n    \u003e docker network create go_starter_network\n    ```\n2. `mysql` \u0026 `nsq`\n    ```shell\n    # MYSQL start\n    \u003e cd deploy/mysql\n    \u003e docker-compose up -d\n    # NSQ start\n    \u003e cd deploy/nsq\n    \u003e docker-compose up -d\n    ```\n3. `be server`\n    ```shell\n    # go-starter start\n    \u003e cd deploy\n    \u003e docker-compose up -d\n    ```\n4. `Health`\n    ```shell\n    http://{IP}:{PORT}/\n    ```\n\n\n### Other\n- Dockerfile \n  ```dockerfile\n    # build go \n    FROM golang:1.16.1-alpine3.13 as builder\n    ......\n    RUN CGO_ENABLED=0 GOOS=linux go build -o go_starter app/main.go\n    \n    # package stage\n    FROM alpine\n    ......\n    # copy from builder\n    COPY --from=builder /app/go_starter /app\n    # ......\n  ```\n  \n- Uber IOC/DI: [fx](https://pkg.go.dev/go.uber.org/fx)\n  \n    ```go\n    //other code\n    ......\n    \n    var (\n        httpCmd = \u0026cobra.Command{\n            Use:   \"http\",\n            Short: \"Start Http REST API\",\n            Run:   initHTTP,\n        }\n    )\n    \n    func initHTTP(cmd *cobra.Command, args []string) {\n        fx.New(inject()).Run()\n    }\n    \n    func inject() fx.Option {\n        return fx.Options(\n            fx.Provide(\n                config.NewConfig,\n                utils.NewTimeoutContext,\n            ),\n            libs.XormModule,\n            repository.Module,\n            service.Module,\n            controller.Module,\n            nsq.ProducerModule,\n            nsq.ConsumerModule,\n            http.Module,\n        )\n    }\n    \n    ```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinkhello%2Fgo-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinkhello%2Fgo-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinkhello%2Fgo-starter/lists"}