{"id":20459735,"url":"https://github.com/rosbit/csv-generator","last_synced_at":"2026-04-16T23:02:27.319Z","repository":{"id":57565419,"uuid":"337644019","full_name":"rosbit/csv-generator","owner":"rosbit","description":"csv content generator. csv内容生成器，免去数小标的烦恼。","archived":false,"fork":false,"pushed_at":"2021-02-10T08:18:41.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-16T00:24:45.102Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/rosbit.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-02-10T07:04:30.000Z","updated_at":"2021-02-10T08:22:46.000Z","dependencies_parsed_at":"2022-09-03T12:20:57.291Z","dependency_job_id":null,"html_url":"https://github.com/rosbit/csv-generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fcsv-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fcsv-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fcsv-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fcsv-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rosbit","download_url":"https://codeload.github.com/rosbit/csv-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242014722,"owners_count":20057880,"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":[],"created_at":"2024-11-15T12:17:07.849Z","updated_at":"2025-12-04T01:08:55.535Z","avatar_url":"https://github.com/rosbit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# csv生成器\n\n 1. 通过接口实现csv输出与数据生成逻辑的分离\n 1. 通过列名输出数据，免去列下标数数容易出错的问题\n 1. 支持csv BOM头信息的输出，在各种系统上查看都不出现乱码\n 1. csv生成文件还是通过网络输出，使用场景自主决定\n 1. 通过提供adapter实现通用接口函数，减少实现代码\n\n## 接口定义\n\n```go\ntype CSVGenerator interface {\n\t/// 在输出整个csv之前调用，在这里可以做一些输出准备工作\n\tBeforeOutputCSV()\n\n\t/// 获取输出目标\n\tGetWriter() io.Writer\n\n\t/// 获取csv的标题栏\n\tGetTitles() []string\n\n\t// 获取所有的输出行channel\n\tGetRows() (\u003c-chan map[string]string)\n}\n```\n\n## 例子\n\n```go\npackage main\n\nimport (\n\t\"github.com/rosbit/csv-generator\"\n\t\"os\"\n\t\"io\"\n\t\"fmt\"\n)\n\nfunc main() {\n\tcg := \u0026csvTest{}\n\ttocsv.GenerateCSV(cg);\n}\n\n// ---- CSVGenerator implementation ----\ntype csvTest struct {\n\ttocsv.DummyCSVGeneratorAdapter\n}\n\nfunc (a *csvTest) BeforeOutputCSV() {\n\tfmt.Fprintf(os.Stderr, \"BeforeOutputCSV() called\\n\")\n}\n\nfunc (a *csvTest) GetWriter() io.Writer {\n\treturn os.Stdout\n}\n\nfunc (a *csvTest) GetTitles() []string {\n\treturn []string{\"a\", \"b\", \"c\"}\n}\n\nfunc (a *csvTest) GetRows() (\u003c-chan map[string]string) {\n\trows := make(chan map[string]string)\n\tgo func() {\n\t\tfor i := 0; i \u003c 10; i++ {\n\t\t\trow := make(map[string]string)\n\t\t\tfor j := 0; j \u003c 3; j++ {\n\t\t\t\trow[fmt.Sprintf(\"%c\", 'a'+j)] = fmt.Sprintf(\"%d%d\", i+1, j+1)\n\t\t\t}\n\t\t\trows \u003c- row\n\t\t}\n\n\t\tclose(rows)\n\t}()\n\n\treturn rows\n}\n```\n\n## 运行结果\n```csv\na,b,c\n11,12,13\n21,22,23\n31,32,33\n41,42,43\n51,52,53\n61,62,63\n71,72,73\n81,82,83\n91,92,93\n101,102,103\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosbit%2Fcsv-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frosbit%2Fcsv-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosbit%2Fcsv-generator/lists"}