{"id":38617157,"url":"https://github.com/akkagao/go2proto","last_synced_at":"2026-01-17T08:50:33.494Z","repository":{"id":57496571,"uuid":"209727827","full_name":"akkagao/go2proto","owner":"akkagao","description":"根据Golang定义的接口生成proto文件","archived":false,"fork":false,"pushed_at":"2023-02-24T23:06:46.000Z","size":14,"stargazers_count":18,"open_issues_count":3,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-15T02:54:00.799Z","etag":null,"topics":["ast","proto","protobuf"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akkagao.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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":"2019-09-20T07:07:27.000Z","updated_at":"2025-02-19T03:55:43.000Z","dependencies_parsed_at":"2024-06-20T16:47:01.883Z","dependency_job_id":"f384cf98-2c04-4ba8-8f43-8824d4707026","html_url":"https://github.com/akkagao/go2proto","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/akkagao/go2proto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akkagao%2Fgo2proto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akkagao%2Fgo2proto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akkagao%2Fgo2proto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akkagao%2Fgo2proto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akkagao","download_url":"https://codeload.github.com/akkagao/go2proto/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akkagao%2Fgo2proto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"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":["ast","proto","protobuf"],"created_at":"2026-01-17T08:50:33.416Z","updated_at":"2026-01-17T08:50:33.482Z","avatar_url":"https://github.com/akkagao.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go2proto\n\n**不用了解Protobuf语法也能轻松使用golang开发GRPC服务**\n\ngo2proto 可以很轻松的根据Golang定义的接口生成proto文件，很大程度简化GRPC服务的开发工作。当公司要使用GRPC开发项目的时候就不用再感叹`学不动了`\n\n## show code\n\n- 创建一个user.go, 写入如下内容\n\n```go\npackage server\n\ntype User interface {\n\tCreateuser(request Request) Response\n}\n\ntype Request struct {\n\tName string\n}\ntype Response struct {\n\tResult string\n}\n```\n\n- 生成proto文件\n\n在user.go 同目录下执行  ` go2proto -f user.go` 就会自动在当前目录的proto文件夹生成user.proto 文件\n\n```protobuf\n// Code generated by go2proto. DO NOT EDIT.\nsyntax = \"proto3\";\npackage proto;\n\nservice User {\n    rpc Createuser (Request) returns (Response) {} \n}\n\nmessage Request {\n    string Name = 1; \n}\n\nmessage Response {\n    string Result = 1; \n}\n```\n\n是不是很简单呢，可以完全不用了解Protobuf语法，只要用Go定义接口就可以\n\n## 安装\n\n```shell\ngo get -u github.com/akkagao/go2proto\n```\n\n## 使用\n\n安装完执行 go2proto  如果能输出一下内容则说明安装成功\n\n```shell\n➜  go2proto git:(master) ✗ go2proto\ngo2proto version: go2proto/1.0.0\nUsage: go2proto [-f] [-t]\n\nOptions:\n  -f string\n        source file path\n  -t string\n        proto file target path (default \"proto\")\n```\n\n-f 参数用于指定 go接口文件\n\n-t 参数用于指定生成的proto文件存储的目录\n\n## 注意事项\n\n由于这里定义服务的go文件只是用于生成proto文件，建议不要在代码中引用这里定义的struct。\n\n切记由于proto中的字段顺序都是有编号的，所以不要轻易删除字段或修改字段顺序。尤其是项目发布后。\n\n重要的事情说三遍:\n\n**不要删除字段，不要修改顺序**\n\n**不要删除字段，不要修改顺序**\n\n**不要删除字段，不要修改顺序**\n\n## 实现方法\n\n使用Go提供的源码解析工具把go文件解析成ast语法树，然后分析ast语法树内容。通过模板生成proto文件。\n\n代码很简单关键代码不到300行，有兴趣可以花几分钟时间看一下。\n\n## 参考资料：\n\nhttps://www.jianshu.com/p/937d649039ec\n\nhttps://segmentfault.com/a/1190000020386857\n\n感谢以上两篇博客的作者","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakkagao%2Fgo2proto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakkagao%2Fgo2proto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakkagao%2Fgo2proto/lists"}