{"id":40762672,"url":"https://github.com/smokezl/go-worker-pool","last_synced_at":"2026-01-21T17:09:33.830Z","repository":{"id":57575405,"uuid":"182410869","full_name":"smokezl/go-worker-pool","owner":"smokezl","description":null,"archived":false,"fork":false,"pushed_at":"2019-09-03T06:33:12.000Z","size":7,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T12:47:43.965Z","etag":null,"topics":["go","golang","goroutine","worker-pool","worker-queue"],"latest_commit_sha":null,"homepage":null,"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/smokezl.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":"2019-04-20T13:42:33.000Z","updated_at":"2019-09-03T06:38:34.000Z","dependencies_parsed_at":"2022-09-26T19:02:12.678Z","dependency_job_id":null,"html_url":"https://github.com/smokezl/go-worker-pool","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/smokezl/go-worker-pool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smokezl%2Fgo-worker-pool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smokezl%2Fgo-worker-pool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smokezl%2Fgo-worker-pool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smokezl%2Fgo-worker-pool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smokezl","download_url":"https://codeload.github.com/smokezl/go-worker-pool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smokezl%2Fgo-worker-pool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28636812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T15:01:31.228Z","status":"ssl_error","status_checked_at":"2026-01-21T14:42:58.942Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["go","golang","goroutine","worker-pool","worker-queue"],"created_at":"2026-01-21T17:09:33.764Z","updated_at":"2026-01-21T17:09:33.816Z","avatar_url":"https://github.com/smokezl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"go-worker-pool\n===========\n基于 goroutine 和 channel 的生产和消费工具，可以启动`一个生产者`和可配置数量的`多个消费者`，支持取消、超时，自动销毁。可以捕获消费者panic事件，影响消费者数量。\n### 安装\n```\ngo get -u github.com/smokezl/go-worker-pool\n```\n\n### 导入\n```go\nimport \"github.com/smokezl/go-worker-pool\"\n```\n\n### 基本使用方式\n##### 初始化\n ```go\nworker := go_worker_pool.NewGoWorker(ctx, \u0026GoWorkerConfig{\n\tTimeout:   10 * time.Minute,\n    WorkerNum: 20,\n    // Sync 表示是否需要调用 waitGroup\n    Sync:  false,\n})\n```\n##### 针对单个生产者一次或多次 push slice、array或map\n```go\n// 生产者逻辑\ngo func() {\n    // 不要忘记关闭生产者通道\n    defer worker.CloseItemChan()\n    for i := 0; i \u003c 10; i++ {\n        var arr []int\n        for j := 0; j \u003c 100; j++ {\n            arr = append(arr, j)\n        }\n        err = worker.IterationProducer(arr)\n        if err != nil {\n            // err\n            return\n        }\n    }\n}()\nworker.RegisterFinishFunc(func() {\n    // 注册退出执行函数\n    // worker执行完退出或销毁时触发\n})\nworker.RegisterErrFunc(func(err error) {\n    // 注册错误执行函数\n    // worker出错（超时或者panic时触发）\n})\n// 消费者逻辑\nworker.IterationConsumer(func(ctx context.Context, item interface{}) {\n    num := item.(int)\n    // 执行消费者代码\n})\n```\n\n##### 针对单个生产者多次 push 单个元素\n```go\n// 生产者逻辑\ngo func() {\n    // 不要忘记关闭生产者通道 \n    defer worker.CloseItemChan()\n    for i := 0; i \u003c 100; i++ {\n        err = worker.PushProducerItem(i)\n        if err != nil {\n            // err\n            return\n        }\n    }\n}()\n// 消费者逻辑同上\n```\n##### 更多用法可以查看 test 文件\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmokezl%2Fgo-worker-pool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmokezl%2Fgo-worker-pool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmokezl%2Fgo-worker-pool/lists"}